#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <pkglocs.h>
#include <locale.h>
#include <libintl.h>
#include <pkglib.h>
#include <install.h>
#include <libinst.h>
#include <libadm.h>
#include <messages.h>
#define DEFMAIL "root"
extern struct admin adm;
extern int warnflag;
static struct {
char **memloc;
char *tag;
} admlist[] = {
&adm.action, "action",
&adm.basedir, "basedir",
&adm.conflict, "conflict",
&adm.idepend, "idepend",
&adm.instance, "instance",
&adm.mail, "mail",
&adm.partial, "partial",
&adm.rdepend, "rdepend",
&adm.RSCRIPTALT, RSCRIPTALT_KEYWORD,
&adm.runlevel, "runlevel",
&adm.setuid, "setuid",
&adm.space, "space",
(char **)NULL, (char *)NULL
};
char *
setadminSetting(char *a_paramName, char *a_paramValue)
{
char *oldValue = (char *)NULL;
int i;
for (i = 0; admlist[i].memloc; i++) {
if (strcmp(a_paramName, admlist[i].tag) == 0) {
oldValue = *admlist[i].memloc;
*admlist[i].memloc = a_paramValue;
break;
}
}
if (admlist[i].memloc == (char **)NULL) {
logerr(WRN_UNKNOWN_ADM_PARAM, a_paramName);
}
return (oldValue);
}
void
setadminFile(char *file)
{
FILE *fp;
int i;
char param[MAX_PKG_PARAM_LENGTH];
char *value;
char path[PATH_MAX];
int mail = 0;
if (file == NULL)
file = "default";
else if (strcmp(file, "none") == 0) {
adm.basedir = "ask";
return;
}
if (file[0] == '/')
(void) strcpy(path, file);
else {
(void) snprintf(path, sizeof (path), "%s/admin/%s",
get_PKGADM(), file);
if (access(path, R_OK)) {
(void) snprintf(path, sizeof (path), "%s/admin/%s",
PKGADM, file);
}
}
if ((fp = fopen(path, "r")) == NULL) {
progerr(ERR_OPEN_ADMIN_FILE, file, strerror(errno));
quit(99);
}
param[0] = '\0';
while (value = fpkgparam(fp, param)) {
if (strcmp(param, "mail") == 0) {
mail = 1;
}
if (value[0] == '\0') {
param[0] = '\0';
continue;
}
for (i = 0; admlist[i].memloc; i++) {
if (strcmp(param, admlist[i].tag) == 0) {
*admlist[i].memloc = value;
break;
}
}
if (admlist[i].memloc == NULL) {
logerr(WRN_UNKNOWN_ADM_PARAM, param);
free(value);
}
param[0] = '\0';
}
(void) fclose(fp);
if (!mail) {
adm.mail = DEFMAIL;
}
}