- Not longer needed.
This commit is contained in:
parent
e2dda05c75
commit
23738857f2
|
@ -1,205 +0,0 @@
|
||||||
/*
|
|
||||||
** $Id: userrc.c,v 1.3 1998/08/31 15:30:42 michael Exp $
|
|
||||||
**
|
|
||||||
** Copyright 1996-1998 Michael 'Ghandi' Herold <michael@abadonna.mayn.de>
|
|
||||||
**
|
|
||||||
** $Log: userrc.c,v $
|
|
||||||
** Revision 1.3 1998/08/31 15:30:42 michael
|
|
||||||
** - Added touchtone support.
|
|
||||||
** - Added new tcl command "vbox_breaklist" to clear/set the touchtone
|
|
||||||
** breaklist.
|
|
||||||
** - Removed the audio fragment size setting again. I don't know why this
|
|
||||||
** crash my machine. The fragment size setting can be enabled in audio.h
|
|
||||||
** with a define.
|
|
||||||
**
|
|
||||||
** Revision 1.2 1998/08/31 10:43:14 michael
|
|
||||||
** - Changed "char" to "unsigned char".
|
|
||||||
**
|
|
||||||
** Revision 1.1 1998/07/06 09:05:33 michael
|
|
||||||
** - New control file code added. The controls are not longer only empty
|
|
||||||
** files - they can contain additional informations.
|
|
||||||
** - Control "vboxctrl-answer" added.
|
|
||||||
** - Control "vboxctrl-suspend" added.
|
|
||||||
** - Locking mechanism added.
|
|
||||||
** - Configuration parsing added.
|
|
||||||
** - Some code cleanups.
|
|
||||||
**
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include "../config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <fnmatch.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "userrc.h"
|
|
||||||
#include "rc.h"
|
|
||||||
#include "stringutils.h"
|
|
||||||
#include "vboxgetty.h"
|
|
||||||
#include "log.h"
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
/** userrc_parse(): Liest die Datei "vboxgetty.user" ein. **/
|
|
||||||
/*************************************************************************/
|
|
||||||
/** => vboxuser Zeiger auf die User-Struktur. **/
|
|
||||||
/** => home Spoolverzeichnis des Benutzers. **/
|
|
||||||
/** => phone Lokale Telefonnummer die einem Benutzer zugewiesen **/
|
|
||||||
/** werden soll. **/
|
|
||||||
/** **/
|
|
||||||
/** <= 0 wenn die Nummer einem Benutzer zugeordnet werden **/
|
|
||||||
/** konnte oder -1 bei einem Fehler. **/
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
int userrc_parse(struct vboxuser *vboxuser, unsigned char *home, unsigned char *phone)
|
|
||||||
{
|
|
||||||
struct passwd *pwdent;
|
|
||||||
struct group *grpent;
|
|
||||||
unsigned char line[USERRC_MAX_RCLINE + 1];
|
|
||||||
FILE *rc;
|
|
||||||
unsigned char *stop;
|
|
||||||
unsigned char *pattern;
|
|
||||||
unsigned char *group;
|
|
||||||
unsigned char *name;
|
|
||||||
unsigned char *space;
|
|
||||||
unsigned char *mask;
|
|
||||||
int linenr;
|
|
||||||
int havegroup;
|
|
||||||
|
|
||||||
log_line(LOG_D, "Searching local user for number %s...\n", phone);
|
|
||||||
|
|
||||||
printstring(temppathname, "%s/vboxgetty.user", SYSCONFDIR);
|
|
||||||
|
|
||||||
if ((rc = fopen(temppathname, "r")))
|
|
||||||
{
|
|
||||||
linenr = 0;
|
|
||||||
|
|
||||||
while (fgets(line, USERRC_MAX_RCLINE, rc))
|
|
||||||
{
|
|
||||||
linenr++;
|
|
||||||
|
|
||||||
line[strlen(line) - 1] = '\0';
|
|
||||||
|
|
||||||
if ((*line == '\0') || (*line == '#')) continue;
|
|
||||||
|
|
||||||
pattern = strtok(line, ":");
|
|
||||||
name = strtok(NULL, ":");
|
|
||||||
group = strtok(NULL, ":");
|
|
||||||
mask = strtok(NULL, ":");
|
|
||||||
space = strtok(NULL, ":");
|
|
||||||
|
|
||||||
if ((!pattern) || (!name) || (!group) || (!mask) || (!space))
|
|
||||||
{
|
|
||||||
log_line(LOG_E, "Error in \"%s\" line %d.\n", temppathname, linenr);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fnmatch(pattern, vboxuser->localphone, 0) == 0)
|
|
||||||
{
|
|
||||||
log_line(LOG_D, "Found - number matchs pattern \"%s\".\n", pattern);
|
|
||||||
|
|
||||||
if (!*name)
|
|
||||||
{
|
|
||||||
log_line(LOG_E, "You *must* specify a user name or a user id!\n");
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*name == '#')
|
|
||||||
pwdent = getpwuid((uid_t)xstrtol(&name[1], 0));
|
|
||||||
else
|
|
||||||
pwdent = getpwnam(name);
|
|
||||||
|
|
||||||
if (!pwdent)
|
|
||||||
{
|
|
||||||
log_line(LOG_E, "Unable to locate \"%s\" in systems passwd list.\n", name);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
vboxuser->uid = pwdent->pw_uid;
|
|
||||||
vboxuser->gid = pwdent->pw_gid;
|
|
||||||
|
|
||||||
if ((strlen(home) + strlen(pwdent->pw_name) + 2) < (PATH_MAX - 100))
|
|
||||||
{
|
|
||||||
xstrncpy(vboxuser->name, pwdent->pw_name, VBOXUSER_USERNAME);
|
|
||||||
|
|
||||||
printstring(vboxuser->home, "%s/%s", home, pwdent->pw_name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log_line(LOG_E, "Oops! Spool directory name and user name too long!\n");
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*group)
|
|
||||||
{
|
|
||||||
havegroup = 0;
|
|
||||||
|
|
||||||
setgrent();
|
|
||||||
|
|
||||||
while ((grpent = getgrent()))
|
|
||||||
{
|
|
||||||
if (*group == '#')
|
|
||||||
{
|
|
||||||
if (grpent->gr_gid == (gid_t)xstrtol(&group[1], 0))
|
|
||||||
{
|
|
||||||
vboxuser->gid = grpent->gr_gid;
|
|
||||||
havegroup = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (strcmp(grpent->gr_name, group) == 0)
|
|
||||||
{
|
|
||||||
vboxuser->gid = grpent->gr_gid;
|
|
||||||
havegroup = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
endgrent();
|
|
||||||
|
|
||||||
if (!havegroup)
|
|
||||||
{
|
|
||||||
log_line(LOG_E, "Unable to locate \"%s\" in systems group list.\n", group);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vboxuser->space = xstrtol(space, 0);
|
|
||||||
vboxuser->umask = (mode_t)strtol(mask, (char **)&stop, 8);
|
|
||||||
|
|
||||||
if (*stop != '\0')
|
|
||||||
{
|
|
||||||
log_line(LOG_E, "Illegal umask \"%s\" in line %d.\n", mask, linenr);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(rc);
|
|
||||||
|
|
||||||
log_line(LOG_D, "User \"%s\" (%d.%d) will be used...\n", vboxuser->name, vboxuser->uid, vboxuser->gid);
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(rc);
|
|
||||||
}
|
|
||||||
else log_line(LOG_W, "Can't open \"%s\".\n", temppathname);
|
|
||||||
|
|
||||||
return(-1);
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
** $Id: userrc.h,v 1.2 1998/08/31 10:43:15 michael Exp $
|
|
||||||
**
|
|
||||||
** Copyright 1996-1998 Michael 'Ghandi' Herold <michael@abadonna.mayn.de>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _USERRC_H
|
|
||||||
#define _USERRC_H 1
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
/** Defines **************************************************************/
|
|
||||||
|
|
||||||
#define USERRC_MAX_RCLINE 255
|
|
||||||
|
|
||||||
#define VBOXUSER_CALLID 64
|
|
||||||
#define VBOXUSER_NUMBER 64
|
|
||||||
#define VBOXUSER_USERNAME 64
|
|
||||||
|
|
||||||
/** Structures ***********************************************************/
|
|
||||||
|
|
||||||
struct vboxuser
|
|
||||||
{
|
|
||||||
uid_t uid;
|
|
||||||
gid_t gid;
|
|
||||||
int umask;
|
|
||||||
long space;
|
|
||||||
unsigned char incomingid[VBOXUSER_CALLID + 1];
|
|
||||||
unsigned char localphone[VBOXUSER_NUMBER + 1];
|
|
||||||
unsigned char name[VBOXUSER_USERNAME + 1];
|
|
||||||
unsigned char home[PATH_MAX + 1];
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Prototypes ***********************************************************/
|
|
||||||
|
|
||||||
extern int userrc_parse(struct vboxuser *, unsigned char *, unsigned char *);
|
|
||||||
|
|
||||||
#endif /* _USERRC_H */
|
|
Loading…
Reference in New Issue