ftp.nice.ch/pub/next/unix/admin/msend.1.0.N.bs.tar.gz#/msend/misc.c

This is misc.c in view mode; [Download] [Up]

/* misc.c:
 *
 * miscellaneous functions
 *
 * (c) Copyright 1988, 1989, 1990 Jim Frost.  All Rights Reserved.  Please see
 * the accompanying file "Copyright" for more information.
 */

#include "Copyright"
#include "config.h"
#include "msend.h"

void error();

/* easy way to build error messages
 */

void blderr(ri,errno,msg)
struct rimsg *ri;
int    errno;
char   *msg;
{ ri->h.errno= errno;
  ri->h.msglen= strlen(msg);
  strcpy(ri->msg,msg);
}

void die(i)
int i;
{ error("md terminated");
  exit(i);
}

/* when we have a problem, call this
 */

void error(s)
char *s;
{ int  uid;
  long t;
  char when[30];
  FILE *f;

  time(&t);
  strcpy(when,ctime(&t));
  when[strlen(when)-1]= '\0';
  if (getuid() == ROOTUID) {
    uid= geteuid();
    seteuid(ROOTUID);
  }
  f= fopen(LOGFILE,"a");
  if (getuid() == ROOTUID)
    seteuid(uid);
  if (f != NULL) {
    flock(fileno(f),LOCK_EX);
    fprintf(f,"%s: %s\n",when,s);
    flock(fileno(f),LOCK_UN);
    fclose(f);
  }
  else
    printf("%s: %s\n",when,s);
}

/* this returns the port number to use for communication
 */

int portnum()
{ struct servent *se;
  int    p;

  /* if possible, return the port number in /etc/services; if not,
   * use hardcoded default
   */

  if ((se= getservbyname("msend","tcp")) == NULL)
    p= PORTNUM;
  else
    p= ntohs(se->s_port);

  /* oops, someone forgot to make me setuid
   */

  if ((p < 1024) && geteuid()) {
    printf("portnum: not setuid\n");
    exit(1);
  }
  return(p);
}

/* find the host name within an address, put it in an array, and truncate
 * the address at the hostname.
 */

char *striphost(addr,host)
char addr[];
char *host;
{ int a;

  for (a= strlen(addr); (a >= 0) && (addr[a] != '@'); a--)
    ;
  if (a >= 0) {
    strcpy(host,&addr[a+1]);
    addr[a]= '\0';
    return(host);
  }
  host[0]= '\0';
  return(NULL);
}

char *gethome(user)
     char *user;
{ struct passwd *pw;

  if (! (pw= getpwnam(user)))
    return(NULL);
  return(pw->pw_dir);
}

int getid(user)
     char *user;
{ struct passwd *pw;

  if (! (pw= getpwnam(user)))
    return(-1);
  return(pw->pw_uid);
}

#ifdef NEEDS_FLOCK
/* if the system needs flock, put the correct locking function in here.  if
 * you leave it like this it's possible that you'll get some conflict in
 * writing to spool files and such, but it's not likely and it won't hurt
 * anything much.
 */

int flock(fd, how)
     int fd, how;
{
  return(0);
}
#endif

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.