1
0
Files
irix-657m-src/eoe/lib/libadm/src/ckgid.c
2022-09-29 17:59:04 +03:00

170 lines
2.9 KiB
C

/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
/*LINTLIBRARY*/
#ident "$Revision: 1.5 $"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <grp.h>
#include <stdlib.h>
#include <malloc.h>
#include "libadm.h"
#define PROMPT "Enter the name of an existing group"
#define MESG "Please enter the name of an existing group."
#define ALTMESG "Please enter one of the following group names:\\n\\t"
#define MALSIZ 64
#define DELIM1 '/'
#define BLANK ' '
int ckgrpfile(void);
static char *
setmsg(int disp)
{
struct group
*grpptr;
int count, n, m;
char *msg;
if(disp == 0)
return(MESG);
m = MALSIZ;
n = sizeof(ALTMESG);
msg = (char *) calloc(m, sizeof(char));
(void) strcpy(msg, ALTMESG);
setgrent();
count = 0;
while(grpptr = getgrent()) {
n += strlen(grpptr->gr_name) + 2;
while(n >= m) {
m += MALSIZ;
msg = (char *) realloc(msg, m*sizeof(char));
}
if(count++)
(void) strcat(msg, ", ");
(void) strcat(msg, grpptr->gr_name);
}
endgrent();
return(msg);
}
int
ckgid_dsp(void)
{
struct group *grpptr;
/* if display flag is set, then list out group file */
if (ckgrpfile() == 1)
return(1);
setgrent();
while (grpptr = getgrent())
(void) printf("%s\n", grpptr->gr_name);
endgrent();
return(0);
}
int
ckgid_val(char *grpnm)
{
int valid;
setgrent ();
valid = (getgrnam(grpnm) ? 0 : 1);
endgrent ();
return(valid);
}
int
ckgrpfile(void) /* check to see if group file there */
{
setgrent ();
if (!getgrent()) {
endgrent ();
return(1);
}
endgrent ();
return(0);
}
void
ckgid_err(int disp, char *error)
{
char *msg;
msg = setmsg(disp);
puterror(stdout, msg, error);
if(disp)
free(msg);
}
void
ckgid_hlp(int disp, char *help)
{
char *msg;
msg = setmsg(disp);
puthelp(stdout, msg, help);
if(disp)
free(msg);
}
int
ckgid(char *gid, short disp, char *defstr, char *error, char *help, char *prompt)
{
char *defmesg,
input[128];
defmesg = NULL;
if(!prompt)
prompt = PROMPT;
start:
putprmpt(stderr, prompt, NULL, defstr);
if(getinput(input)) {
if(disp && defmesg)
free(defmesg);
return(1);
}
if(!strlen(input)) {
if(defstr) {
if(disp && defmesg)
free(defmesg);
(void) strcpy(gid, defstr);
return(0);
}
if(!defmesg)
defmesg = setmsg(disp);
puterror(stderr, defmesg, error);
goto start;
} else if(!strcmp(input, "?")) {
if(!defmesg)
defmesg = setmsg(disp);
puthelp(stderr, defmesg, help);
goto start;
} else if(ckquit && !strcmp(input, "q")) {
if(disp && defmesg)
free(defmesg);
return(3);
} else if(ckgid_val(input)) {
if(!defmesg)
defmesg = setmsg(disp);
puterror(stderr, defmesg, error);
goto start;
}
(void) strcpy(gid, input);
if(disp && defmesg)
free(defmesg);
return(0);
}