contrib/chg/hgclient.c
changeset 40109 413b6b10fdd5
parent 35959 9724f54923ec
child 41336 763b45bc4483
equal deleted inserted replaced
40108:e5fbdc3659fc 40109:413b6b10fdd5
    30        CAP_RUNCOMMAND = 0x0002,
    30        CAP_RUNCOMMAND = 0x0002,
    31        /* cHg extension: */
    31        /* cHg extension: */
    32        CAP_ATTACHIO = 0x0100,
    32        CAP_ATTACHIO = 0x0100,
    33        CAP_CHDIR = 0x0200,
    33        CAP_CHDIR = 0x0200,
    34        CAP_SETENV = 0x0800,
    34        CAP_SETENV = 0x0800,
    35        CAP_SETUMASK = 0x1000,
    35        CAP_SETUMASK2 = 0x1000,
    36        CAP_VALIDATE = 0x2000,
    36        CAP_VALIDATE = 0x2000,
    37        CAP_SETPROCNAME = 0x4000,
    37        CAP_SETPROCNAME = 0x4000,
    38 };
    38 };
    39 
    39 
    40 typedef struct {
    40 typedef struct {
    46     {"getencoding", CAP_GETENCODING},
    46     {"getencoding", CAP_GETENCODING},
    47     {"runcommand", CAP_RUNCOMMAND},
    47     {"runcommand", CAP_RUNCOMMAND},
    48     {"attachio", CAP_ATTACHIO},
    48     {"attachio", CAP_ATTACHIO},
    49     {"chdir", CAP_CHDIR},
    49     {"chdir", CAP_CHDIR},
    50     {"setenv", CAP_SETENV},
    50     {"setenv", CAP_SETENV},
    51     {"setumask", CAP_SETUMASK},
    51     {"setumask2", CAP_SETUMASK2},
    52     {"validate", CAP_VALIDATE},
    52     {"validate", CAP_VALIDATE},
    53     {"setprocname", CAP_SETPROCNAME},
    53     {"setprocname", CAP_SETPROCNAME},
    54     {NULL, 0}, /* terminator */
    54     {NULL, 0}, /* terminator */
    55 };
    55 };
    56 
    56 
   423 static void forwardumask(hgclient_t *hgc)
   423 static void forwardumask(hgclient_t *hgc)
   424 {
   424 {
   425 	mode_t mask = umask(0);
   425 	mode_t mask = umask(0);
   426 	umask(mask);
   426 	umask(mask);
   427 
   427 
   428 	static const char command[] = "setumask\n";
       
   429 	sendall(hgc->sockfd, command, sizeof(command) - 1);
       
   430 	uint32_t data = htonl(mask);
   428 	uint32_t data = htonl(mask);
   431 	sendall(hgc->sockfd, &data, sizeof(data));
   429 	enlargecontext(&hgc->ctx, sizeof(data));
       
   430 	memcpy(hgc->ctx.data, &data, sizeof(data));
       
   431 	hgc->ctx.datasize = sizeof(data);
       
   432 	writeblockrequest(hgc, "setumask2");
   432 }
   433 }
   433 
   434 
   434 /*!
   435 /*!
   435  * Open connection to per-user cmdserver
   436  * Open connection to per-user cmdserver
   436  *
   437  *
   506 		updateprocname(hgc);
   507 		updateprocname(hgc);
   507 	if (hgc->capflags & CAP_ATTACHIO)
   508 	if (hgc->capflags & CAP_ATTACHIO)
   508 		attachio(hgc);
   509 		attachio(hgc);
   509 	if (hgc->capflags & CAP_CHDIR)
   510 	if (hgc->capflags & CAP_CHDIR)
   510 		chdirtocwd(hgc);
   511 		chdirtocwd(hgc);
   511 	if (hgc->capflags & CAP_SETUMASK)
   512 	if (hgc->capflags & CAP_SETUMASK2)
   512 		forwardumask(hgc);
   513 		forwardumask(hgc);
   513 
   514 
   514 	return hgc;
   515 	return hgc;
   515 }
   516 }
   516 
   517