mcp 1.0 patch #4
kyle at xanth.UUCP
kyle at xanth.UUCP
Fri Mar 13 11:16:08 AEST 1987
This patch (#4) makes the following changes in the mcp 1.0 distribution
1) The remove-from- commands now display the correct number of items
that they remove (thanx to tadguy at odu.edu).
2) Mcp now warns of alias/user name collisions. It would be rather
disconcerting to create a new user and have his/her incoming personal
mail go whistling into a mailing list. (thanx to john at odu.edu)
3) Fixed operator precedence problems in load.c. Oddly enough,
lint didn't complain about this. (thanx to lenlo at miraculix.ida.liu.se)
4) Routines that access /usr/adm/lastlog now check for negative uids.
(thanx to lenlo at miraculix.ida.liu.se)
5) Corrected two typos that I'm surprised haven't cuased problems
before now. (thanx to lenlo at miraculix.ida.liu.se)
This patch will not work if patches #1-3 have not been applied. These patches
may be obtained from me; send requests to my e-mail address.
To apply this patch from readnews, vnews or rn, type "s|patch -d -p0 DIR",
with DIR being the directory where the mcp sources and documentation are kept.
Alternately you can save this article and later cd to DIR and "patch -p0 <
thisarticle". Don't leave off the "-p0". If you don't have patch (alas!),
you'll have to apply the context diffs below by hand.
kyle jones, odu computer science
ARPA: kyle at xanth.cs.odu.edu CSNET: kyle at odu.csnet
UUCP: kyle at xanth.uucp
Index: src/version.c
Prereq: (#3)
*** src/version.c.old Thu Feb 26 17:53:36 1987
--- src/version.c Thu Feb 26 17:51:56 1987
***************
*** 3,9 ****
char *n_copyright;
};
static struct notice Note = {
! "mcp version 1.0 (#3) ",
"(c) 1986 by Kyle E. Jones\n\n\
All sources and documentation of this mcp distribution are\n\
included in this copyright, but permission is granted to\n\
--- 3,9 ----
char *n_copyright;
};
static struct notice Note = {
! "mcp version 1.0 (#4) ",
"(c) 1986 by Kyle E. Jones\n\n\
All sources and documentation of this mcp distribution are\n\
included in this copyright, but permission is granted to\n\
Index: src/lastlog.c
*** src/lastlog.c.old Thu Mar 12 16:47:53 1987
--- src/lastlog.c Thu Mar 12 14:18:11 1987
***************
*** 53,58 ****
--- 53,60 ----
int uid;
{
+ if (uid < 0)
+ return &zero;
if (LL_FileDes == UNDEFINED)
setllent();
lseek(LL_FileDes, (long)(uid * sizeof(struct lastlog)), L_SET)<0
***************
*** 67,72 ****
--- 69,76 ----
{
int fd;
+ if (uid < 0)
+ return;
fd = open(LASTLOG, O_WRONLY);
if (fd < 0) {
perr(LASTLOG);
Index: src/add.c
*** src/add.c.old Thu Mar 12 17:40:28 1987
--- src/add.c Thu Mar 12 17:31:57 1987
***************
*** 83,88 ****
--- 83,93 ----
err1("%s: alias exists", (char *)v[1]);
return;
}
+ if (userexists((char *)v[1])) {
+ err1("%s is also an existing user!", (char *)v[1]);
+ if (no("Create the alias anyway? [n] "))
+ return;
+ }
addressv = get_gpa(257);
GetLine("Addresses: ", 256, &cc, addressv, &Null_List);
***************
*** 800,805 ****
--- 805,819 ----
err1("%s: user exists", (char *) v[1]);
return;
}
+ #ifdef SENDMAIL
+ if (c > 1 && aliasexists((char *)v[1])) {
+ (void) sprintf(prompt,
+ "%s is also a mail alias! Use anyway? [n] ",
+ v[1]);
+ if (no(prompt))
+ return;
+ }
+ #endif
if (c > 1) {
(void) strcpy((char *)cap, (char *)v[1]);
capitalize((char *)cap);
Index: src/update.c
*** src/update.c.old Thu Mar 12 17:40:48 1987
--- src/update.c Thu Mar 12 17:30:16 1987
***************
*** 87,92 ****
--- 87,94 ----
err1("%s: alias exists", (char *)*namev);
return;
}
+ if (userexists((char *)*namev))
+ err1("warning: %s is also an existing user.", (char *)*namev);
critical();
***************
*** 584,590 ****
}
if (eq(*namev, v[1]))
; /* no change */
! else if (rangeexists((char *)namev)) {
err("that name is taken");
return;
}
--- 586,592 ----
}
if (eq(*namev, v[1]))
; /* no change */
! else if (rangeexists((char *)*namev)) {
err("that name is taken");
return;
}
***************
*** 731,736 ****
--- 733,742 ----
*/
(void) sprintf(prompt, "Login name [%s]: ", ac->ac_name);
GetLine(prompt, 1, &cc, namev, &Null_List);
+ #ifdef SENDMAIL
+ if (cc && !eq(*namev, ac->ac_name) && aliasexists((char *)*namev))
+ err1("warning: %s is also a mail alias.", (char *)*namev);
+ #endif
/*
* Change real name?
Index: src/job.c
*** src/job.c.old Thu Mar 12 16:48:10 1987
--- src/job.c Thu Mar 12 13:21:20 1987
***************
*** 19,25 ****
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/time.h>
! #include <sys/resource.h
#include <sys/dir.h>
#include <lastlog.h>
#include "sysdep.h"
--- 19,25 ----
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/time.h>
! #include <sys/resource.h>
#include <sys/dir.h>
#include <lastlog.h>
#include "sysdep.h"
Index: src/misc.c
*** src/misc.c.old Thu Mar 12 16:48:12 1987
--- src/misc.c Thu Mar 12 12:30:04 1987
***************
*** 139,145 ****
--- 139,149 ----
if (strlen((char *)v[c-1]) < 8) {
(void) strcpy((char *)user, (char *)v[c-1]);
strlower((char *)user);
+ #ifdef SENDMAIL
+ if (!userexists((char *)user) && !aliasexists((char *)user)) {
+ #else
if (!userexists((char *)user)) {
+ #endif
scrub((char *)user);
return user;
}
***************
*** 153,159 ****
--- 157,167 ----
up.p_cp[2] = ((char *)v[2])[0];
up.p_cp[3] = '\0';
strlower((char *)user);
+ #ifdef SENDMAIL
+ if (!userexists((char *)user) && !aliasexists((char *)user)) {
+ #else
if (!userexists((char *)user)) {
+ #endif
scrub((char *)user);
return user;
}
***************
*** 172,178 ****
--- 180,190 ----
up.p_cp[tail++] = ((char *)v[0])[0];
up.p_cp[tail--] = '\0';
strlower((char *)user);
+ #ifdef SENDMAIL
+ while (userexists((char *)user) || aliasexists((char *)user))
+ #else
while (userexists((char *)user))
+ #endif
up.p_cp[tail]++;
scrub((char *)user);
return user;
Index: src/load.c
*** src/load.c.old Thu Mar 12 16:48:35 1987
--- src/load.c Thu Mar 12 13:32:00 1987
***************
*** 189,197 ****
user = ac->ac_name;
(void) orstrlist(&ac->ac_groups, &groups);
orstrlist(&ac->ac_classes, &classes)&&
! ModBits |= AC;
orstrlist(&ac->ac_sigs, &sigs)&&
! ModBits |= AC;
for (i=0; i<groups.l_count; i++) {
gm2 = getgmnam((char *)groups.l_list[i]);
if (instrlist(&gm2->gm_mem, (char *)user))
--- 189,197 ----
user = ac->ac_name;
(void) orstrlist(&ac->ac_groups, &groups);
orstrlist(&ac->ac_classes, &classes)&&
! (ModBits |= AC);
orstrlist(&ac->ac_sigs, &sigs)&&
! (ModBits |= AC);
for (i=0; i<groups.l_count; i++) {
gm2 = getgmnam((char *)groups.l_list[i]);
if (instrlist(&gm2->gm_mem, (char *)user))
***************
*** 219,226 ****
added++;
ac = getacnam((char *)user);
(void) orstrlist(&ac->ac_groups, &groups);
! orstrlist(&ac->ac_classes, &classes)&&ModBits|=AC;
! orstrlist(&ac->ac_sigs, &sigs)&&ModBits|=AC;
for (i=0; i<groups.l_count; i++) {
gm2 = getgmnam((char *)groups.l_list[i]);
if (instrlist(&gm2->gm_mem, (char *)user))
--- 219,226 ----
added++;
ac = getacnam((char *)user);
(void) orstrlist(&ac->ac_groups, &groups);
! orstrlist(&ac->ac_classes, &classes) && (ModBits|=AC);
! orstrlist(&ac->ac_sigs, &sigs) && (ModBits|=AC);
for (i=0; i<groups.l_count; i++) {
gm2 = getgmnam((char *)groups.l_list[i]);
if (instrlist(&gm2->gm_mem, (char *)user))
Index: src/remove.c
*** src/remove.c.old Thu Mar 12 16:50:20 1987
--- src/remove.c Thu Mar 12 14:07:55 1987
***************
*** 309,315 ****
removed++;
}
if (removed) {
! (void) printf("%d removed\n");
ModBits |= AC;
}
else
--- 309,315 ----
removed++;
}
if (removed) {
! (void) printf("%d removed\n", removed);
ModBits |= AC;
}
else
***************
*** 370,376 ****
removed++;
}
if (removed) {
! (void) printf("%d removed\n");
ModBits |= AC|GR;
}
else
--- 370,376 ----
removed++;
}
if (removed) {
! (void) printf("%d removed\n", removed);
ModBits |= AC|GR;
}
else
***************
*** 430,436 ****
removed++;
}
if (removed) {
! (void) printf("%d removed\n");
ModBits |= AC;
}
else
--- 430,436 ----
removed++;
}
if (removed) {
! (void) printf("%d removed\n", removed);
ModBits |= AC;
}
else
***************
*** 722,734 ****
strlistdel(&Users, (char *)ac->ac_name);
#ifdef SENDMAIL
! for (i=0; i < AliasList.l_count; i++) {
! al = (struct alias *) AliasList.l_list[i];
! if (instrlist(&al->al_addresses, (char *)ac->ac_name)) {
! strlistdel(&al->al_addresses, (char *)ac->ac_name);
! ModBits |= AL;
! }
! }
#endif
FREEMEM((char *)ac->ac_name);
--- 722,741 ----
strlistdel(&Users, (char *)ac->ac_name);
#ifdef SENDMAIL
! /*
! * If an alias exists that matches the user name we're removing
! * then DON'T remove the name from the aliases. The *alias*
! * was receiving the mail anyway, not the user, therefore the aliases
! * should in be unaffected.
! */
! if (!aliasexists((char *)ac->ac_name))
! for (i=0; i < AliasList.l_count; i++) {
! al = (struct alias *) AliasList.l_list[i];
! if (instrlist(&al->al_addresses, (char *)ac->ac_name)) {
! strlistdel(&al->al_addresses, (char *)ac->ac_name);
! ModBits |= AL;
! }
! }
#endif
FREEMEM((char *)ac->ac_name);
Index: src/report.c
*** src/report.c.old Thu Mar 12 18:33:03 1987
--- src/report.c Thu Mar 12 18:25:09 1987
***************
*** 110,115 ****
--- 110,126 ----
if (!instrlist(&s, (char *)ac->ac_sigs.l_list[i]))
strlistadd(&s, (char *)ac->ac_sigs.l_list[i]);
}
+ #ifdef SENDMAIL
+ if (aliasexists((char *)ac->ac_name)) {
+ al = getalnam((char *)ac->ac_name);
+ if (al->al_addresses.l_count == 0)
+ (void) printf("user \"%s\"'s mail disappears into an empty alias.\n", (char *)ac->ac_name);
+ else {
+ (void) printf("user \"%s\"'s mail is distributed to ", (char *) ac->ac_name);
+ listlist(&al->al_addresses);
+ }
+ }
+ #endif
/*
* Skip home directory and shell check if not the super-user,
* since not some shells may not be accessible to non
***************
*** 212,218 ****
if (ac->ac_gid == gm->gm_gid)
memcount++;
}
! printf("\"%s\", %d member%s, %d groupie%s\n", gm->gm_name,
memcount - gm->gm_mem.l_count, S(memcount - gm->gm_mem.l_count),
gm->gm_mem.l_count, S(gm->gm_mem.l_count));
}
--- 223,229 ----
if (ac->ac_gid == gm->gm_gid)
memcount++;
}
! (void) printf("\"%s\", %d member%s, %d groupie%s\n", gm->gm_name,
memcount - gm->gm_mem.l_count, S(memcount - gm->gm_mem.l_count),
gm->gm_mem.l_count, S(gm->gm_mem.l_count));
}
***************
*** 225,231 ****
if (instrlist(&ac->ac_classes, cs->cs_name))
memcount++;
}
! printf("\"%s\", %d member%s, ends %s\n", cs->cs_name,
memcount, S(memcount), when(cs->cs_exptime));
}
if (SigList.l_count) puts("== Sigs ==");
--- 236,242 ----
if (instrlist(&ac->ac_classes, cs->cs_name))
memcount++;
}
! (void) printf("\"%s\", %d member%s, ends %s\n", cs->cs_name,
memcount, S(memcount), when(cs->cs_exptime));
}
if (SigList.l_count) puts("== Sigs ==");
***************
*** 237,243 ****
if (instrlist(&ac->ac_sigs, sg->sg_name))
memcount++;
}
! printf("\"%s\", %d member%s, ends %s\n", sg->sg_name,
memcount, S(memcount), when(sg->sg_exptime));
}
return;
--- 248,254 ----
if (instrlist(&ac->ac_sigs, sg->sg_name))
memcount++;
}
! (void) printf("\"%s\", %d member%s, ends %s\n", sg->sg_name,
memcount, S(memcount), when(sg->sg_exptime));
}
return;
Index: man/mcp.n
*** man/mcp.n.old Thu Mar 12 18:42:50 1987
--- man/mcp.n Thu Mar 12 18:42:15 1987
***************
*** 343,348 ****
--- 343,351 ----
\(bu empty aliases
.br
.ti -3
+ \(bu alias/user name collisions
+ .br
+ .ti -3
\(bu empty classes and sigs
.br
.ti -3
More information about the Comp.sources.bugs
mailing list