pid_t pidinfo (pid_t pid, char **name) { char buf[NAME_MAX * 2] = {0,}; FILE *f = NULL; char path[PATH_MAX] = {0,}; char *p = NULL; int ret = 0; sprintf (path, PROC"/%d/status", pid); f = fopen (path, "r"); if (!f) return -1; if (name) *name = NULL; for (;;) { size_t len; memset (buf, 0, sizeof (buf)); if (fgets (buf, sizeof (buf), f) == NULL || (len = strlen (buf)) == 0 || buf[len - 1] != '\n') { pid = -1; goto out; } buf[len - 1] = '\0'; if (name && !*name) { p = strtail (buf, "Name:"); if (p) { while (isspace (*++p)); *name = gf_strdup (p); if (!*name) { pid = -2; goto out; } continue; } } p = strtail (buf, "PPid:"); if (p) break; } while (isspace (*++p)); ret = gf_string2int (p, &pid); if (ret == -1) pid = -1; out: fclose (f); if (pid == -1 && name && *name) GF_FREE (name); if (pid == -2) fprintf (stderr, "out of memory\n"); return pid; }
/* Match the Incoming trusted.glusterfs.<uuid>.xtime against volume uuid */ int match_uuid_local (const char *name, char *uuid) { name = strtail ((char *)name, MARKER_XATTR_PREFIX); if (!name || name++[0] != '.') return -1; name = strtail ((char *)name, uuid); if (!name || strcmp (name, ".xtime") != 0) return -1; return 0; }
static int _arg_parse_uid (char *val, void *data) { char *user = strtail (val, "user-map-root="); struct passwd *pw = NULL; if (!user) return 0; pw = getpwnam (user); if (!pw) return -EINVAL; if (*(int *)data >= 0) /* uid ambiguity, already found */ return -EINVAL; *(int *)data = pw->pw_uid; return 0; }
static int invoke_gluster (int argc, char **argv) { int i = 0; int j = 0; int optsover = 0; char *ov = NULL; for (i = 1; i < argc; i++) { ov = strtail (argv[i], "--"); if (ov && !optsover) { if (*ov == '\0') optsover = 1; continue; } switch (++j) { case 1: if (strcmp (argv[i], "volume") != 0) goto error; break; case 2: if (strcmp (argv[i], "info") != 0) goto error; break; case 3: break; default: goto error; } } argv[0] = "gluster"; execvp (SBIN_DIR"/gluster", argv); fprintf (stderr, "exec of gluster failed\n"); return 127; error: fprintf (stderr, "disallowed gluster invocation\n"); return 1; }
/* main, menu */ void renmove (void) { char buf [MAXPATHLEN+20]; char *name; register struct file *p; register c; int done, all, ch; int exd, exf; if (c = tagged ()) { /* move group of files */ sprintf (buf, "Rename or move %d file%s to", c, c>1 ? "s" : ""); if (! (name = getstring (60, (cur==left?right:left)->cwd, " Rename ", buf))) return; runset (name); exd = exist (name); all = 0; for (p=cur->d.cat; p<cur->d.cat+cur->d.num; ++p) if (p->tag) { sprintf (buf, "%s/%s", name, p->name); exf = exd=='d' ? exist (buf) : 0; if (exd=='f' || exf=='f') { if (! all) { ch = getchoice (1, " Rename ", "File exists", exf=='f' ? buf : name, " Overwrite ", " All ", " Cancel "); switch (ch) { default: case 2: /* cancel */ continue; case 1: /* all */ all = 1; } } } else if (exf == 'd') { error ("%s is a directory", buf); continue; } runarg (p->name); } message (" Move ", "Moving %d file%s to %s ...", c, c>1 ? "s" : "", name); done = rundone ("/bin/mv", "mv"); if (done) { endmesg (); message (" Move ", "Done"); } else error ("Error while moving %d file%s to %s", c, c>1 ? "s" : "", name); endmesg (); name = 0; } else if ((c = (p = &cur->d.cat[cur->d.curfile])->mode & S_IFMT) == S_IFDIR) { /* rename directory */ sprintf (buf, "Rename \"%s\" to", strtail (p->name, '/', 60)); if (! (name = getstring (60, (cur==left?right:left)->cwd, " Rename ", buf))) return; exd = exist (name); sprintf (buf, "%s/%s", name, p->name); exf = exd=='d' ? exist (buf) : 0; if (exd=='f' || exf=='f') { if (getchoice (1, " Rename ", "File exists", exf=='f' ? buf : name, " Overwrite ", " Cancel ", NULL)) return; } else if (exf == 'd') { error ("Directory %s exists", buf); return; } if (runl(1, "/bin/mv", "mv", p->name, name, NULL)) { error ("Cannot move %s to %s", p->name, name); return; } } else if (c == S_IFREG) { /* move regular file */ sprintf (buf, "Rename or move \"%s\" to", p->name); if (! (name = getstring (60, (cur==left?right:left)->cwd, " Rename ", buf))) return; exd = exist (name); sprintf (buf, "%s/%s", name, p->name); exf = exd=='d' ? exist (buf) : 0; if (exd=='f' || exf=='f') { if (getchoice (1, " Rename ", "File exists", exf=='f' ? buf : name, " Overwrite ", " Cancel ", NULL)) return; } else if (exf == 'd') { error ("%s is a directory", buf); return; } if (runl(1, "/bin/mv", "mv", p->name, name, NULL)) { error ("Cannot move %s to %s", p->name, name); return; } } setdir (cur == left ? right : left, NULL); setdir (cur, NULL); if (name) findfile (cur, name); }
int AuthClient::getGearToken(char mode, char* token, char* tokensecret, char* endpoint, char* gearkey, char* gearsecret, char* scope, char* rtoken, char* rtokensecret) { #ifdef DEBUG_H Serial.println("Enter getGearToken().."); #endif const char* noncealpha = "0123456789abcdefghijklmnopqrstuvwxyz"; char buff[MAXHEADERLINESIZE]; char signbase[MAXSIGNATUREBASELENGTH]; char nonce[NONCESIZE+1]; #define OAUTH_CALLBACK "oauth_callback=" #define OAUTH_CONSUMER_KEY "oauth_consumer_key=" #define OAUTH_NONCE "oauth_nonce=" #define OAUTH_SIGNATURE_METHOD_CONST "oauth_signature_method=\"HMAC-SHA1\"" #define OAUTH_TIMESTAMP "oauth_timestamp=" #define OAUTH_VERSION_CONST "oauth_version=\"1.0\"" #define OAUTH_SIGNATURE "oauth_signature=" #define OAUTH_TOKEN "oauth_token=" #define OAUTH_VERIFIER "oauth_verifier=" *token = '\0'; *tokensecret = '\0'; *endpoint = '\0'; strcpy(signbase,"POST&http%3A%2F%2F"); sprintf(strtail(signbase),"%s%%3A%d",GEARAUTHHOST,GEARAUTHPORT); if (mode == _REQUESTTOKEN) { writeln("POST /oauth/request_token HTTP/1.1"); strcat(signbase,"%2Foauth%2Frequest_token&"); } else { writeln("POST /oauth/access_token HTTP/1.1"); strcat(signbase,"%2Foauth%2Faccess_token&"); } sprintf(buff,"Host: %s:%d",GEARAUTHHOST,GEARAUTHPORT); writeln(buff); write("Authorization: OAuth "); //OAUTH_CALLBACK /* this header is too long -- have to break into smaller chunks to write */ *buff = '\0'; append(buff,OAUTH_CALLBACK,0); strcat(buff,"\"appid%3D"); strcat(buff,appid); write(buff); *buff = '\0'; strcat(buff,"%26scope%3D"); strcat(buff,scope); strcat(buff,"%26verifier%3D"); strcat(buff,VERIFIER); strcat(buff,"\","); write(buff); *buff = '\0'; append(buff,OAUTH_CALLBACK,0); encode(strtail(signbase),buff); /*add key value*/ buff[0] = '\0'; addParam(buff,"appid",appid,1); addParam(buff,"scope",scope,0); addParam(buff,"verifier",VERIFIER,0); encode(strtail(signbase),buff); //OAUTH_CONSUMER_KEY *buff = '\0'; append(buff,OAUTH_CONSUMER_KEY,0); //sprintf(strtail(buff),"\"%s\"",gearkey); strcat(buff,"\""); strcat(buff,gearkey); strcat(buff,"\""); strcat(signbase,"%26"); //& encode(strtail(signbase),buff); strcat(buff,","); write(buff); //OAUTH_NONCE randomSeed(analogRead(0)); for (char i=0;i<NONCESIZE;i++) { nonce[i] = *(noncealpha+random(0,35)); } nonce[NONCESIZE] = '\0'; *buff = '\0'; append(buff,(char *)OAUTH_NONCE,0); sprintf(strtail(buff),"\"%s\"",nonce); strcat(signbase,"%26"); //& encode(strtail(signbase),buff); strcat(buff,","); write(buff); //OAUTH_SIGNATURE_METHOD *buff = '\0'; append(buff,(char *)OAUTH_SIGNATURE_METHOD_CONST,0); strcat(signbase,"%26"); //& encode(strtail(signbase),buff); strcat(buff,","); write(buff); //OAUTH_TIMESTAMP *buff = '\0'; append(buff,(char *)OAUTH_TIMESTAMP,0); //Bypass NTP sprintf(strtail(buff),"\"%lu\"",bootts+millis()/1000); strcat(signbase,"%26"); //& encode(strtail(signbase),buff); strcat(buff,","); write(buff); if (rtoken) { //OAUTH_TOKEN *buff = '\0'; append(buff,(char *)OAUTH_TOKEN,0); sprintf(strtail(buff),"\"%s\"",rtoken); strcat(signbase,"%26"); //& encode(strtail(signbase),buff); strcat(buff,","); write(buff); //OAUTH_VERIFIER *buff = '\0'; append(buff,(char *)OAUTH_VERIFIER,0); sprintf(strtail(buff),"\"%s\"",VERIFIER); strcat(signbase,"%26"); //& encode(strtail(signbase),buff); strcat(buff,","); write(buff); } //OAUTH_VERSION *buff = '\0'; append(buff,(char *)OAUTH_VERSION_CONST,0); strcat(signbase,"%26"); //& encode(strtail(signbase),buff); strcat(buff,","); write(buff); // Calculate HMAC-SHA1(signbase) and include in the Authorization header //OAUTH_SIGNATURE char hkey[66]; char signature[29]; *buff = '\0'; append(buff,(char *)OAUTH_SIGNATURE,'"'); sprintf(hkey,"%s&%s",gearsecret,rtokensecret?rtokensecret:""); Sha1.initHmac((uint8_t*)hkey,strlen(hkey)); Sha1.HmacBase64(signature, signbase); encode(strtail(buff),signature); strcat(buff,"\""); strcat(buff,"\r\n"); write(buff); writeln("Accept: */*"); writeln("Connection: close"); writeln("User-Agent: Arduigear"); writeln("Content-length: 0"); writeln("Content-Type: application/x-www-form-urlencoded"); writeln(NULL); #ifdef DEBUG_H Serial.println("Finish OAuth HTTP request.."); #endif delay(2000); int httpstatus = 0; char pline = 0; while(true) { if (readln(buff, (size_t)MAXHEADERLINESIZE)) { #ifdef DEBUG_H Serial.println(buff); #endif if (pline<2) { if (strncmp(buff,"HTTP",4)==0) { buff[12] = '\0'; httpstatus = atoi(buff+9); } } else { char *p; char *s, *t; int last = 0; p = buff; while (*p != '\0') { s = p; while (*s!='=' && *s!='\0' && *s!='&') s++; /* seek for = */ t= s; while (*t!='\0' && *t!='&') t++; /* seek for & */ *s = '\0'; if (*t == '\0') last = 1; *t = '\0'; if (strcmp(p,"oauth_token")==0) strcpy(token,s+1); else if (strcmp(p,"oauth_token_secret")==0) strcpy(tokensecret,s+1); else if (strcmp(p,"endpoint")==0) strcpy(endpoint,s+1); delay(400); if (!last) p = t+1; else break; } return httpstatus; } if (strlen(buff)<6) pline++; } else { return 0; } } return httpstatus; }
void AuthClient::addParam(char* buff, char* key, char* value, bool first) { if (!first) strcat(buff,"%26"); strcat(buff,key); strcat(buff,"%3D"); encode(strtail(buff),value); }
pid_t pidinfo (pid_t pid, char **name) { char buf[NAME_MAX * 2] = {0,}; FILE *f = NULL; char *p = NULL; char *free_p = NULL; int ret = 0; ret = gf_asprintf (&p, PROC"/%d/status", pid); if (ret == -1) goto oom; f = fopen (p, "r"); if (!f) { GF_FREE (p); return -1; } free_p = p; if (name) *name = NULL; for (;;) { memset (buf, 0, sizeof (buf)); if (fgets (buf, sizeof (buf), f) == NULL || buf[strlen (buf) - 1] != '\n') { pid = -1; goto out; } buf[strlen (buf) -1] = '\0'; if (name && !*name) { p = strtail (buf, "Name:"); if (p) { while (isspace (*++p)); *name = gf_strdup (p); if (!*name) goto oom; continue; } } p = strtail (buf, "PPid:"); if (p) break; } while (isspace (*++p)); ret = gf_string2int (p, &pid); if (ret == -1) pid = -1; out: if (free_p) GF_FREE (free_p); fclose (f); return pid; oom: if (free_p) GF_FREE (free_p); fclose (f); fprintf (stderr, "out of memory\n"); return -2; }