Thread View: net.sources.bugs
1 messages
1 total messages
Started by kyle
Fri, 13 Mar 1987 01:16
mcp 1.0 patch #4
Author: kyle
Date: Fri, 13 Mar 1987 01:16
Date: Fri, 13 Mar 1987 01:16
449 lines
13198 bytes
13198 bytes
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@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@odu.edu)
3) Fixed operator precedence problems in load.c. Oddly enough,
lint didn't complain about this. (thanx to lenlo@miraculix.ida.liu.se)
4) Routines that access /usr/adm/lastlog now check for negative uids.
(thanx to lenlo@miraculix.ida.liu.se)
5) Corrected two typos that I'm surprised haven't cuased problems
before now. (thanx to lenlo@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@xanth.cs.odu.edu CSNET: kyle@odu.csnet
UUCP: kyle@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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads