| 1193 | | static GB_ERROR gbcm_logout(GBCONTAINER *gb_main, char *user) |
| 1194 | | { |
| 1195 | | long i; |
| 1196 | | GB_MAIN_TYPE *Main = GBCONTAINER_MAIN(gb_main); |
| 1197 | | |
| 1198 | | for (i = 0; i<GB_MAX_USERS; i++) { |
| 1199 | | if (!Main->users[i]) continue; |
| 1200 | | if (!strcmp(user, Main->users[i]->username)) { |
| 1201 | | Main->users[i]->nusers--; |
| 1202 | | if (Main->users[i]->nusers<=0) { // kill user and his projects |
| 1203 | | free(Main->users[i]->username); |
| 1204 | | freenull(Main->users[i]); |
| 1205 | | fprintf(stdout, "The User %s has logged out\n", user); |
| 1206 | | } |
| 1207 | | return 0; |
| 1208 | | } |
| 1209 | | } |
| 1210 | | return GB_export_errorf("User '%s' not logged in", user); |
| 1211 | | } |
| 1212 | | |
| 1920 | | if (Main->users[i]) continue; |
| 1921 | | Main->users[i] = (struct gb_user_struct *) GB_calloc(sizeof(struct gb_user_struct), 1); |
| 1922 | | Main->users[i]->username = strdup(user); |
| 1923 | | Main->users[i]->userid = i; |
| 1924 | | Main->users[i]->userbit = 1<<i; |
| 1925 | | Main->users[i]->nusers = 1; |
| 1926 | | Main->this_user = Main->users[i]; |
| 1927 | | return 0; |
| 1928 | | } |
| 1929 | | return GB_export_errorf("Too many users in this database: User '%s' ", user); |
| | 1899 | gb_user_struct*& user = Main->users[i]; |
| | 1900 | if (!user) { |
| | 1901 | user = (gb_user_struct *) GB_calloc(sizeof(gb_user_struct), 1); |
| | 1902 | |
| | 1903 | user->username = strdup(loginname); |
| | 1904 | user->userid = i; |
| | 1905 | user->userbit = 1<<i; |
| | 1906 | user->nusers = 1; |
| | 1907 | |
| | 1908 | Main->this_user = user; |
| | 1909 | |
| | 1910 | return 0; |
| | 1911 | } |
| | 1912 | } |
| | 1913 | return GB_export_errorf("Too many users in this database: User '%s' ", loginname); |
| | 1935 | |
| | 1936 | GB_ERROR gbcm_logout(GB_MAIN_TYPE *Main, const char *loginname) { |
| | 1937 | // if 'loginname' is NULL, the first logged-in user will be logged out |
| | 1938 | |
| | 1939 | if (!loginname) { |
| | 1940 | loginname = Main->users[0]->username; |
| | 1941 | gb_assert(loginname); |
| | 1942 | } |
| | 1943 | |
| | 1944 | for (long i = 0; i<GB_MAX_USERS; i++) { |
| | 1945 | gb_user_struct*& user = Main->users[i]; |
| | 1946 | if (user && strcmp(loginname, user->username) == 0) { |
| | 1947 | user->nusers--; |
| | 1948 | if (user->nusers<=0) { // kill user and his projects |
| | 1949 | if (i) fprintf(stdout, "User '%s' has logged out\n", loginname); |
| | 1950 | free(user->username); |
| | 1951 | freenull(user); |
| | 1952 | } |
| | 1953 | return 0; |
| | 1954 | } |
| | 1955 | } |
| | 1956 | return GB_export_errorf("User '%s' not logged in", loginname); |
| | 1957 | } |
| | 1958 | |