Пример #1
0
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;
}
Пример #2
0
/* 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;
}
Пример #3
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;
}
Пример #4
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;
}
Пример #5
0
/* 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);
}
Пример #8
0
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;
}