X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/5eaef52092da48d922a6b37cf48bb7c5104d0841..9d3d51ad672f0e2d3961581c4675362349a3fe9d:/update/config.c diff --git a/update/config.c b/update/config.c index c76592c3..b40670a0 100644 --- a/update/config.c +++ b/update/config.c @@ -1,26 +1,30 @@ -/* $Header$ +/* $Id$ * * Routines to handle configuration file for Moira's update_server. * These routines must load the file into memory rather than parse * it each time as one of the things the server may do is chroot() * itself. * - * (c) Copyright 1992 by the Massachusetts Institute of Technology. + * Copyright (C) 1992-1998 by the Massachusetts Institute of Technology. * For copying and distribution information, please see the file * . */ #include +#include +#include "update_server.h" + +#include + +#include +#include +#include #include #include #include -#include -#include -#include -#include -#include -#include +#include +RCSID("$Header$"); #define CONFIG_FILE "/etc/athena/moira.conf" @@ -37,8 +41,7 @@ static char *config_buf = NULL; static char **config_keys, **config_values; - -static init() +static int init(void) { int fd, count = 0; struct stat st; @@ -53,14 +56,19 @@ static init() { config_buf = ""; config_keys = malloc(sizeof(char *) * 2); + if (!config_keys) + return ENOMEM; config_keys[0] = config_keys[1] = NULL; return MR_SUCCESS; } + if (fstat(fd, &st) < 0) return MR_INTERNAL; + config_buf = malloc(st.st_size + 2); if (!config_buf) - return MR_NO_MEM; + return ENOMEM; + if (read(fd, config_buf, st.st_size) < st.st_size) { free(config_buf); @@ -80,13 +88,17 @@ static init() if (!config_keys || !config_values) { free(config_buf); + free(config_keys); + free(config_values); config_buf = NULL; - return MR_NO_MEM; + return ENOMEM; } + count = 0; for (p = strtok(config_buf, "\n"); p; p = strtok(NULL, "\n")) config_keys[count++] = p; config_keys[count] = NULL; + for (count = 0; config_keys[count]; count++) { config_values[count] = "";