🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: net.sources.bugs
1 messages
1 total messages Started by kyle Fri, 13 Mar 1987 01:16
mcp 1.0 patch #4
#963
Author: kyle
Date: Fri, 13 Mar 1987 01:16
449 lines
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