Initial revision
[mspang/quota.git] / add.c
1 /*
2  * $Id$
3  * add.c - add a new entry to the database
4  */
5
6 #include <gdbm.h>
7 #include <limits.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11
12 #include "csc.quota.h"
13
14 void add(int argc, char ** argv) {
15     GDBM_FILE dbf;
16     char db_file_name[PATH_MAX];
17     struct quota_entry entry;
18     datum key, value;
19     int ret;
20
21     if (argc != 2) {
22         fputs("Usage: add userid quota\n", stderr);
23         return;
24     }
25
26     key.dptr = strdup(argv[0]);
27     key.dsize = strlen(key.dptr) + 1;
28     value.dptr = (char *) &entry;
29     value.dsize = sizeof(struct quota_entry);
30     entry.disk_num = 0;
31     entry.megabytes = atoi(argv[1]);
32     entry.flags = QUOTAF_NORMAL;
33
34     sprintf(db_file_name, "%s/" QUOTA_DB,
35         QUOTA_DIR, current_term());
36
37     dbf = gdbm_open(db_file_name, BUFSIZ, GDBM_WRCREAT, 0600, NULL);
38
39     if (dbf == NULL) {
40         fprintf(stderr, "error opening the quota database: %s\n",
41             gdbm_strerror(gdbm_errno));
42         return;
43     }
44
45     ret = gdbm_store(dbf, key, value, GDBM_INSERT);
46     /* we immediately close the gdbm since we're done with it */
47     gdbm_close(dbf);
48     if (ret == 1) {
49         fprintf(stderr, "%s already in the database\n",
50             argv[0]);
51     } else if (ret == -1) {
52         fputs("add error\n", stderr);
53     }
54
55     return;
56 }