[1603] in Moira
Re: getenv("USER") in blanche...
daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Tue Jul 11 18:25:24 2000
Message-Id: <200007112225.SAA01679@x15-cruise-basselope.mit.edu>
To: "Paul B. Hill" <pbh@MIT.EDU>
cc: "Danilo Almeida" <dalmeida@MIT.EDU>, moiradev@MIT.EDU,
pismere-team@MIT.EDU
In-Reply-To: Your message of "Tue, 11 Jul 2000 18:02:02 EDT."
<4.2.0.58.20000711175023.01e72138@po12.mit.edu>
Date: Tue, 11 Jul 2000 18:25:14 -0400
From: Garry Zacheiss <zacheiss@MIT.EDU>
I agree that looking at $USER and falling back to Kerberos
principal seems reasonable. This doesn't deal with the case of not
having tickets and doing any of the operations that are currently using
getenv("USER"), but those operations are add_list, add_member_to_list,
and delete_member_from_list, which can never be done unauthentically
anyway. Here's a patch that implements this.
Garry
Index: blanche.c
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/clients/blanche/blanche.c,v
retrieving revision 1.46
diff -c -r1.46 blanche.c
*** blanche.c 2000/04/19 23:15:12 1.46
--- blanche.c 2000/07/11 22:22:43
***************
*** 71,76 ****
--- 71,77 ----
char *membervec[4];
struct member *memberstruct;
char *server = NULL, *p;
+ char *username = NULL;
/* clear all flags & lists */
infoflg = verbose = syncflg = memberflg = recursflg = 0;
***************
*** 88,93 ****
--- 89,105 ----
success = 1;
+ username = getenv("USER");
+ if (!username)
+ {
+ username = mrcl_krb_user();
+ if (!username)
+ {
+ com_err(whoami, 0, "Could not determine username");
+ exit(1);
+ }
+ }
+
/* parse args, building addlist, dellist, & synclist */
while (++arg - argv < argc)
{
***************
*** 377,383 ****
else
{
argv[L_ACE_TYPE] = "USER";
! argv[L_ACE_NAME] = getenv("USER");
status = mr_query("add_list", 11, argv, NULL, NULL);
}
--- 389,395 ----
else
{
argv[L_ACE_TYPE] = "USER";
! argv[L_ACE_NAME] = username;
status = mr_query("add_list", 11, argv, NULL, NULL);
}
***************
*** 590,596 ****
NULL, NULL);
if (status == MR_SUCCESS)
{
! if (!strcmp(membervec[0], getenv("USER")))
{
fprintf(stderr, "\nWARNING: \"LIST:%s\" was just added "
"to list \"%s\".\n", membervec[2], membervec[0]);
--- 602,608 ----
NULL, NULL);
if (status == MR_SUCCESS)
{
! if (!strcmp(membervec[0], username))
{
fprintf(stderr, "\nWARNING: \"LIST:%s\" was just added "
"to list \"%s\".\n", membervec[2], membervec[0]);
***************
*** 685,691 ****
memberstruct->type != M_ANY)
{
if (status == MR_PERM && memberstruct->type == M_ANY &&
! !strcmp(membervec[2], getenv("USER")))
{
/* M_ANY means we've fallen through from the user
* case. The user is trying to remove himself from
--- 697,703 ----
memberstruct->type != M_ANY)
{
if (status == MR_PERM && memberstruct->type == M_ANY &&
! !strcmp(membervec[2], username))
{
/* M_ANY means we've fallen through from the user
* case. The user is trying to remove himself from
***************
*** 714,720 ****
com_err(whoami, 0, " Unable to find member %s to delete from %s",
memberstruct->name, listname);
success = 0;
! if (!strcmp(membervec[0], getenv("USER")))
{
fprintf(stderr, "(If you were trying to remove yourself "
"from the list \"%s\",\n", membervec[2]);
--- 726,732 ----
com_err(whoami, 0, " Unable to find member %s to delete from %s",
memberstruct->name, listname);
success = 0;
! if (!strcmp(membervec[0], username))
{
fprintf(stderr, "(If you were trying to remove yourself "
"from the list \"%s\",\n", membervec[2]);