X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fuser_ops.c;h=d52bad9d319ace1a872f4a5693595f7a222a9eed;hb=ae822088bca5cce3d6c3ef7f6d312a6d5de7a77c;hp=ce832d949101d5383b52c90c1636ccef63e99438;hpb=309b2911059babccb8dd464a238fd0610e6a333b;p=citadel.git diff --git a/citadel/user_ops.c b/citadel/user_ops.c index ce832d949..d52bad9d3 100644 --- a/citadel/user_ops.c +++ b/citadel/user_ops.c @@ -17,6 +17,7 @@ #include "citadel.h" #include "server.h" #include "proto.h" +#include "database.h" extern struct config config; @@ -50,11 +51,13 @@ int getuser(struct usersupp *usbuf, char name[]) { } cdbus = cdb_fetch(CDB_USERSUPP, lowercase_name, strlen(lowercase_name)); - if (cdbus == NULL) { /* not found */ - return(1); + if (cdbus == NULL) { + return(1); /* user not found */ } - memcpy(usbuf, cdbus->ptr, cdbus->len); + memcpy(usbuf, cdbus->ptr, + ( (cdbus->len > sizeof(struct usersupp)) ? + sizeof(struct usersupp) : cdbus->len) ); cdb_free(cdbus); return(0); } @@ -87,7 +90,8 @@ void putuser(struct usersupp *usbuf, char *name) lowercase_name[a] = tolower(name[a]); } - cdb_store(CDB_USERSUPP, lowercase_name, strlen(lowercase_name), + cdb_store(CDB_USERSUPP, + lowercase_name, strlen(lowercase_name), usbuf, sizeof(struct usersupp)); } @@ -96,8 +100,7 @@ void putuser(struct usersupp *usbuf, char *name) /* * lputuser() - same as putuser() but locks the record */ -void lputuser(struct usersupp *usbuf, char *name) -{ +void lputuser(struct usersupp *usbuf, char *name) { putuser(usbuf,name); end_critical_section(S_USERSUPP); } @@ -117,8 +120,12 @@ int is_aide(void) { */ int is_room_aide(void) { if ( (CC->usersupp.axlevel >= 6) - || (CC->quickroom.QRroomaide == CC->usersupp.usernum) ) return(1); - else return(0); + || (CC->quickroom.QRroomaide == CC->usersupp.usernum) ) { + return(1); + } + else { + return(0); + } } /* @@ -133,7 +140,9 @@ int getuserbynumber(struct usersupp *usbuf, long int number) while(cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) { bzero(usbuf, sizeof(struct usersupp)); - memcpy(usbuf, cdbus->ptr, cdbus->len); + memcpy(usbuf, cdbus->ptr, + ( (cdbus->len > sizeof(struct usersupp)) ? + sizeof(struct usersupp) : cdbus->len) ); cdb_free(cdbus); if (usbuf->usernum == number) { return(0); @@ -711,7 +720,9 @@ void cmd_gnur(void) { cdb_rewind(CDB_USERSUPP); while (cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) { bzero(&usbuf, sizeof(struct usersupp)); - memcpy(&usbuf, cdbus->ptr, cdbus->len); + memcpy(&usbuf, cdbus->ptr, + ( (cdbus->len > sizeof(struct usersupp)) ? + sizeof(struct usersupp) : cdbus->len) ); cdb_free(cdbus); if ((usbuf.flags & US_NEEDVALID) &&(usbuf.axlevel > 0)) { @@ -853,7 +864,9 @@ void cmd_list(void) { while(cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) { bzero(&usbuf, sizeof(struct usersupp)); - memcpy(&usbuf, cdbus->ptr, cdbus->len); + memcpy(&usbuf, cdbus->ptr, + ( (cdbus->len > sizeof(struct usersupp)) ? + sizeof(struct usersupp) : cdbus->len) ); cdb_free(cdbus); if (usbuf.axlevel > 0) { @@ -1126,6 +1139,7 @@ void cmd_agup(char *cmdbuf) { usbuf.posted, (int)usbuf.axlevel, usbuf.usernum); + }