12
#include "server-helpers.h"
13
#include "server-messages.h"
14
#include <glusterfs/syscall.h>
15
#include <glusterfs/default-args.h>
16
#include "server-common.h"
23
gid_resolve(server_conf_t *conf, call_stack_t *root)
28
struct passwd *result;
29
gid_t *mygroups = NULL;
32
const gid_list_t *agl;
34
agl = gid_cache_lookup(&conf->gid_cache, root->uid, 0, 0);
36
root->ngrps = agl->gl_count;
38
if (root->ngrps > 0) {
39
ret = call_stack_alloc_groups(root, agl->gl_count);
41
memcpy(root->groups, agl->gl_list,
42
sizeof(gid_t) * agl->gl_count);
46
gid_cache_release(&conf->gid_cache, agl);
51
ret = getpwuid_r(root->uid, &mypw, mystrs, sizeof(mystrs), &result);
53
gf_smsg("gid-cache", GF_LOG_ERROR, errno, PS_MSG_GET_UID_FAILED,
54
"uid=%u", root->uid, NULL);
59
gf_smsg("gid-cache", GF_LOG_ERROR, 0, PS_MSG_UID_NOT_FOUND, "uid=%u",
64
gf_msg_trace("gid-cache", 0, "mapped %u => %s", root->uid, result->pw_name);
66
ngroups = gf_getgrouplist(result->pw_name, root->gid, &mygroups);
68
gf_smsg("gid-cache", GF_LOG_ERROR, 0, PS_MSG_MAPPING_ERROR,
69
"pw_name=%s", result->pw_name, "root->ngtps=%d", root->ngrps,
73
root->ngrps = (uint16_t)ngroups;
77
gl.gl_uid = root->uid;
78
gl.gl_gid = root->gid;
79
gl.gl_count = root->ngrps;
81
gl.gl_list = GF_MALLOC(root->ngrps * sizeof(gid_t), gf_common_mt_groups_t);
83
memcpy(gl.gl_list, mygroups, sizeof(gid_t) * root->ngrps);
89
if (root->ngrps > 0) {
90
call_stack_set_groups(root, root->ngrps, &mygroups);
93
if (gid_cache_add(&conf->gid_cache, &gl) != 1)
100
server_decode_groups(call_frame_t *frame, rpcsvc_request_t *req)
104
if (call_stack_alloc_groups(frame->root, req->auxgidcount) != 0)
107
frame->root->ngrps = req->auxgidcount;
108
if (frame->root->ngrps == 0)
112
if (frame->root->ngrps > GF_MAX_AUX_GROUPS)
115
for (; i < frame->root->ngrps; ++i)
116
frame->root->groups[i] = req->auxgids[i];
122
server_resolve_wipe(server_resolve_t *resolve)
124
GF_FREE((void *)resolve->path);
126
GF_FREE((void *)resolve->bname);
128
loc_wipe(&resolve->resolve_loc);
132
free_state(server_state_t *state)
140
dict_unref(state->params);
141
state->params = NULL;
145
iobref_unref(state->iobref);
146
state->iobref = NULL;
150
dict_unref(state->dict);
155
dict_unref(state->xdata);
159
GF_FREE((void *)state->volume);
161
GF_FREE((void *)state->name);
163
loc_wipe(&state->loc);
164
loc_wipe(&state->loc2);
166
server_resolve_wipe(&state->resolve);
167
server_resolve_wipe(&state->resolve2);
175
rpc_transport_unref(state->xprt);
183
server_connection_cleanup_flush_cbk(call_frame_t *frame, void *cookie,
184
xlator_t *this, int32_t op_ret,
185
int32_t op_errno, dict_t *xdata)
189
client_t *client = NULL;
191
xlator_t *victim = NULL;
192
server_conf_t *conf = NULL;
193
xlator_t *serv_xl = NULL;
194
rpc_transport_t *xprt = NULL;
195
rpc_transport_t *xp_next = NULL;
196
int32_t detach = (long)cookie;
197
gf_boolean_t xprt_found = _gf_false;
199
GF_VALIDATE_OR_GOTO("server", this, out);
200
GF_VALIDATE_OR_GOTO("server", frame, out);
203
client = frame->root->client;
204
serv_xl = frame->this;
205
conf = serv_xl->private;
211
victim = client->bound_xl;
214
fd_cnt = GF_ATOMIC_DEC(client->fd_cnt);
215
if (!fd_cnt && conf && detach) {
216
pthread_mutex_lock(&conf->mutex);
218
list_for_each_entry_safe(xprt, xp_next, &conf->xprt_list, list)
220
if (!xprt->xl_private)
222
if (xprt->xl_private == client) {
223
xprt_found = _gf_true;
228
pthread_mutex_unlock(&conf->mutex);
230
rpc_transport_unref(xprt);
235
gf_client_unref(client);
236
STACK_DESTROY(frame->root);
244
do_fd_cleanup(xlator_t *this, client_t *client, fdentry_t *fdentries,
245
int fd_count, int32_t detach)
249
call_frame_t *tmp_frame = NULL;
250
xlator_t *bound_xl = NULL;
253
GF_VALIDATE_OR_GOTO("server", this, out);
254
GF_VALIDATE_OR_GOTO("server", fdentries, out);
256
bound_xl = client->bound_xl;
258
for (i = 0; i < fd_count; i++) {
259
fd = fdentries[i].fd;
262
tmp_frame = create_frame(this, this->ctx->pool);
263
if (tmp_frame == NULL) {
267
tmp_frame->root->type = GF_OP_TYPE_FOP;
268
GF_ASSERT(fd->inode);
270
ret = inode_path(fd->inode, NULL, &path);
273
gf_smsg(this->name, GF_LOG_INFO, 0, PS_MSG_FD_CLEANUP,
274
"path=%s", path, NULL);
277
gf_smsg(this->name, GF_LOG_INFO, 0, PS_MSG_FD_CLEANUP,
278
"inode-gfid=%s", uuid_utoa(fd->inode->gfid), NULL);
281
tmp_frame->local = fd;
282
tmp_frame->root->pid = 0;
283
gf_client_ref(client);
284
tmp_frame->root->client = client;
285
memset(&tmp_frame->root->lk_owner, 0, sizeof(gf_lkowner_t));
287
STACK_WIND_COOKIE(tmp_frame, server_connection_cleanup_flush_cbk,
288
(void *)(long)detach, bound_xl,
289
bound_xl->fops->flush, fd, NULL);
301
server_connection_cleanup(xlator_t *this, client_t *client, int32_t flags,
302
gf_boolean_t *fd_exist)
304
server_ctx_t *serv_ctx = NULL;
305
fdentry_t *fdentries = NULL;
306
uint32_t fd_count = 0;
309
xlator_t *bound_xl = NULL;
315
GF_VALIDATE_OR_GOTO("server", this, out);
316
GF_VALIDATE_OR_GOTO(this->name, client, out);
317
GF_VALIDATE_OR_GOTO(this->name, flags, out);
319
serv_ctx = server_ctx_get(client, client->this);
321
if (serv_ctx == NULL) {
322
gf_smsg(this->name, GF_LOG_INFO, 0, PS_MSG_SERVER_CTX_GET_FAILED, NULL);
326
LOCK(&serv_ctx->fdtable_lock);
328
if (serv_ctx->fdtable && (flags & POSIX_LOCKS))
329
fdentries = gf_fd_fdtable_get_all_fds(serv_ctx->fdtable, &fd_count);
331
UNLOCK(&serv_ctx->fdtable_lock);
333
if (client->bound_xl == NULL)
336
if (flags & INTERNAL_LOCKS) {
337
cd_ret = gf_client_disconnect(client);
340
if (fdentries != NULL) {
342
bound_xl = client->bound_xl;
344
for (i = 0; i < fd_count; i++) {
345
fd = fdentries[i].fd;
352
(*fd_exist) = _gf_true;
353
GF_ATOMIC_ADD(client->fd_cnt, fd_cnt);
364
gf_msg_debug(this->name, 0,
365
"Performing cleanup on %d "
368
ret = do_fd_cleanup(this, client, fdentries, fd_count, detach);
370
gf_smsg(this->name, GF_LOG_INFO, 0, PS_MSG_FDENTRY_NULL, NULL);
380
server_alloc_frame(rpcsvc_request_t *req, client_t *client)
382
call_frame_t *frame = NULL;
383
server_state_t *state = NULL;
385
frame = create_frame(client->this, req->svc->ctx->pool);
389
state = GF_CALLOC(1, sizeof(*state), gf_server_mt_state_t);
390
if (caa_unlikely(!state)) {
391
STACK_DESTROY(frame->root);
396
if (client->bound_xl)
397
state->itable = client->bound_xl->itable;
399
state->xprt = rpc_transport_ref(req->trans);
400
state->resolve.fd_no = -1;
401
state->resolve2.fd_no = -1;
403
frame->root->state = state;
404
frame->root->type = GF_OP_TYPE_FOP;
406
frame->this = client->this;
412
get_frame_from_request(rpcsvc_request_t *req)
414
call_frame_t *frame = NULL;
415
client_t *client = NULL;
416
client_t *tmp_client = NULL;
417
xlator_t *this = NULL;
418
server_conf_t *priv = NULL;
419
clienttable_t *clienttable = NULL;
421
rpc_transport_t *trans = NULL;
422
server_state_t *state = NULL;
424
GF_VALIDATE_OR_GOTO("server", req, out);
426
GF_VALIDATE_OR_GOTO("server", trans, out);
427
GF_VALIDATE_OR_GOTO("server", req->svc, out);
428
GF_VALIDATE_OR_GOTO("server", req->svc->ctx, out);
430
client = trans->xl_private;
431
GF_VALIDATE_OR_GOTO("server", client, out);
433
frame = server_alloc_frame(req, client);
437
frame->root->op = req->procnum;
440
priv = this->private;
441
clienttable = this->ctx->clienttable;
443
for (i = 0; i < clienttable->max_clients; i++) {
444
tmp_client = clienttable->cliententries[i].client;
445
if (client == tmp_client) {
453
if (req->pid == NFS_PID) {
454
RPC_AUTH_ROOT_SQUASH(req);
455
RPC_AUTH_ALL_SQUASH(req);
468
else if (!client->auth.username) {
469
RPC_AUTH_ROOT_SQUASH(req);
470
RPC_AUTH_ALL_SQUASH(req);
487
else if (req->pid != GF_CLIENT_PID_NO_ROOT_SQUASH &&
488
req->pid != GF_CLIENT_PID_GSYNCD &&
489
req->pid != GF_CLIENT_PID_DEFRAG &&
490
req->pid != GF_CLIENT_PID_SELF_HEALD &&
491
req->pid != GF_CLIENT_PID_QUOTA_MOUNT) {
492
RPC_AUTH_ROOT_SQUASH(req);
493
RPC_AUTH_ALL_SQUASH(req);
501
gf_client_ref(client);
503
frame->root->uid = req->uid;
504
frame->root->gid = req->gid;
505
frame->root->pid = req->pid;
506
frame->root->client = client;
507
lk_owner_copy(&frame->root->lk_owner, &req->lk_owner);
509
if (priv->server_manage_gids)
510
gid_resolve(priv, frame->root);
512
server_decode_groups(frame, req);
514
memcpy(&frame->root->identifier, trans->peerinfo.identifier, UNIX_PATH_MAX);
517
frame->root->flags = req->flags;
518
frame->root->ctime = req->ctime;
522
state = CALL_STATE(frame);
523
state->client = client;
529
server_build_config(xlator_t *this, server_conf_t *conf)
537
GF_VALIDATE_OR_GOTO("server", this, out);
538
GF_VALIDATE_OR_GOTO("server", conf, out);
540
ret = dict_get_int32(this->options, "inode-lru-limit",
541
&conf->inode_lru_limit);
543
conf->inode_lru_limit = 16384;
546
data = dict_get(this->options, "trace");
548
ret = gf_string2boolean(data->data, &conf->trace);
550
gf_smsg(this->name, GF_LOG_WARNING, EINVAL, PS_MSG_INVALID_ENTRY,
555
data = dict_get(this->options, "config-directory");
559
ret = sys_stat(data->data, &buf);
560
if ((ret != 0) || !S_ISDIR(buf.st_mode)) {
561
gf_smsg(this->name, GF_LOG_ERROR, 0, PS_MSG_DIR_NOT_FOUND,
562
"data=%s", data->data, NULL);
567
if ((gf_strstr(data->data, "/", "..")) == -1) {
569
gf_smsg(this->name, GF_LOG_ERROR, 0, PS_MSG_CONF_DIR_INVALID,
570
"data=%s", data->data, NULL);
574
conf->conf_dir = gf_strdup(data->data);
582
print_caller(char *str, int size, call_frame_t *frame)
584
server_state_t *state = NULL;
586
GF_VALIDATE_OR_GOTO("server", str, out);
587
GF_VALIDATE_OR_GOTO("server", frame, out);
589
state = CALL_STATE(frame);
591
snprintf(str, size, " Callid=%" PRId64 ", Client=%s", frame->root->unique,
592
state->xprt->peerinfo.identifier);
599
server_print_resolve(char *str, int size, server_resolve_t *resolve)
603
GF_VALIDATE_OR_GOTO("server", str, out);
606
snprintf(str, size, "<nul>");
610
filled += snprintf(str + filled, size - filled, " Resolve={");
611
if (resolve->fd_no != -1)
612
filled += snprintf(str + filled, size - filled, "fd=%" PRId64 ",",
613
(uint64_t)resolve->fd_no);
615
filled += snprintf(str + filled, size - filled, "bname=%s,",
618
filled += snprintf(str + filled, size - filled, "path=%s",
621
snprintf(str + filled, size - filled, "}");
627
server_print_loc(char *str, int size, loc_t *loc)
631
GF_VALIDATE_OR_GOTO("server", str, out);
634
snprintf(str, size, "<nul>");
638
filled += snprintf(str + filled, size - filled, " Loc={");
641
filled += snprintf(str + filled, size - filled, "path=%s,", loc->path);
643
filled += snprintf(str + filled, size - filled, "inode=%p,",
646
filled += snprintf(str + filled, size - filled, "parent=%p",
649
snprintf(str + filled, size - filled, "}");
655
server_print_params(char *str, int size, server_state_t *state)
659
GF_VALIDATE_OR_GOTO("server", str, out);
661
filled += snprintf(str + filled, size - filled, " Params={");
664
filled += snprintf(str + filled, size - filled, "fd=%p,", state->fd);
666
filled += snprintf(str + filled, size - filled, "valid=%d,",
669
filled += snprintf(str + filled, size - filled, "flags=%d,",
672
filled += snprintf(str + filled, size - filled, "size=%zu,",
675
filled += snprintf(str + filled, size - filled, "offset=%" PRId64 ",",
678
filled += snprintf(str + filled, size - filled, "cmd=%d,", state->cmd);
680
filled += snprintf(str + filled, size - filled, "type=%d,",
683
filled += snprintf(str + filled, size - filled, "name=%s,",
686
filled += snprintf(str + filled, size - filled, "mask=%d,",
689
filled += snprintf(str + filled, size - filled, "volume=%s,",
701
server_resolve_is_empty(server_resolve_t *resolve)
703
if (resolve->fd_no != -1)
706
if (resolve->path != 0)
709
if (resolve->bname != 0)
716
server_print_reply(call_frame_t *frame, int op_ret, int op_errno)
718
server_conf_t *conf = NULL;
719
server_state_t *state = NULL;
720
xlator_t *this = NULL;
723
char *op = "UNKNOWN";
725
GF_VALIDATE_OR_GOTO("server", frame, out);
728
conf = this->private;
730
GF_VALIDATE_OR_GOTO("server", conf, out);
731
GF_VALIDATE_OR_GOTO("server", conf->trace, out);
733
state = CALL_STATE(frame);
735
print_caller(caller, 256, frame);
737
switch (frame->root->type) {
739
op = (char *)gf_fop_list[frame->root->op];
747
snprintf(fdstr, 32, " fd=%p", state->fd);
749
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_SERVER_MSG, "op=%s", op,
750
"caller=%s", caller, "op_ret=%d", op_ret, "op_errno=%d", op_errno,
751
"fdstr=%s", fdstr, NULL);
757
server_print_request(call_frame_t *frame)
759
server_conf_t *conf = NULL;
760
xlator_t *this = NULL;
761
server_state_t *state = NULL;
762
char *op = "UNKNOWN";
763
char resolve_vars[256];
764
char resolve2_vars[256];
767
char other_vars[512];
770
GF_VALIDATE_OR_GOTO("server", frame, out);
773
conf = this->private;
775
GF_VALIDATE_OR_GOTO("server", conf, out);
780
state = CALL_STATE(frame);
782
memset(resolve_vars, '\0', 256);
783
memset(resolve2_vars, '\0', 256);
784
memset(loc_vars, '\0', 256);
785
memset(loc2_vars, '\0', 256);
786
memset(other_vars, '\0', 256);
788
print_caller(caller, 256, frame);
790
if (!server_resolve_is_empty(&state->resolve)) {
791
server_print_resolve(resolve_vars, 256, &state->resolve);
792
server_print_loc(loc_vars, 256, &state->loc);
795
if (!server_resolve_is_empty(&state->resolve2)) {
796
server_print_resolve(resolve2_vars, 256, &state->resolve2);
797
server_print_loc(loc2_vars, 256, &state->loc2);
800
server_print_params(other_vars, 512, state);
802
switch (frame->root->type) {
804
op = (char *)gf_fop_list[frame->root->op];
811
gf_smsg(this->name, GF_LOG_INFO, 0, PS_MSG_SERVER_MSG, "op=%s", op,
812
"caller=%s", caller, "resolve_vars=%s", resolve_vars, "loc_vars=%s",
813
loc_vars, "resolve2_vars=%s", resolve2_vars, "loc2_vars=%s",
814
loc2_vars, "other_vars=%s", other_vars, NULL);
820
serialize_rsp_direntp_v2(gf_dirent_t *entries, gfx_readdirp_rsp *rsp)
822
gf_dirent_t *entry = NULL;
823
gfx_dirplist *trav = NULL;
824
gfx_dirplist *prev = NULL;
827
GF_VALIDATE_OR_GOTO("server", entries, out);
828
GF_VALIDATE_OR_GOTO("server", rsp, out);
830
list_for_each_entry(entry, &entries->list, list)
832
trav = GF_CALLOC(1, sizeof(*trav), gf_server_mt_dirent_rsp_t);
836
trav->d_ino = entry->d_ino;
837
trav->d_off = entry->d_off;
838
trav->d_len = entry->d_len;
839
trav->d_type = entry->d_type;
840
trav->name = entry->d_name;
842
gfx_stat_from_iattx(&trav->stat, &entry->d_stat);
843
dict_to_xdr(entry->dict, &trav->dict);
846
prev->nextentry = trav;
862
serialize_rsp_dirent_v2(gf_dirent_t *entries, gfx_readdir_rsp *rsp)
864
gf_dirent_t *entry = NULL;
865
gfx_dirlist *trav = NULL;
866
gfx_dirlist *prev = NULL;
869
GF_VALIDATE_OR_GOTO("server", rsp, out);
870
GF_VALIDATE_OR_GOTO("server", entries, out);
872
list_for_each_entry(entry, &entries->list, list)
874
trav = GF_CALLOC(1, sizeof(*trav), gf_server_mt_dirent_rsp_t);
877
trav->d_ino = entry->d_ino;
878
trav->d_off = entry->d_off;
879
trav->d_len = entry->d_len;
880
trav->d_type = entry->d_type;
881
trav->name = entry->d_name;
883
prev->nextentry = trav;
896
readdir_rsp_cleanup_v2(gfx_readdir_rsp *rsp)
898
gfx_dirlist *prev = NULL;
899
gfx_dirlist *trav = NULL;
904
trav = trav->nextentry;
913
readdirp_rsp_cleanup_v2(gfx_readdirp_rsp *rsp)
915
gfx_dirplist *prev = NULL;
916
gfx_dirplist *trav = NULL;
921
trav = trav->nextentry;
922
GF_FREE(prev->dict.pairs.pairs_val);
931
common_rsp_locklist(lock_migration_info_t *locklist, gfs3_locklist **reply)
933
lock_migration_info_t *tmp = NULL;
934
gfs3_locklist *trav = NULL;
935
gfs3_locklist *prev = NULL;
938
GF_VALIDATE_OR_GOTO("server", locklist, out);
940
list_for_each_entry(tmp, &locklist->list, list)
943
trav = GF_CALLOC(1, sizeof(*trav), gf_server_mt_lock_mig_t);
947
switch (tmp->flock.l_type) {
949
tmp->flock.l_type = GF_LK_F_RDLCK;
952
tmp->flock.l_type = GF_LK_F_WRLCK;
955
tmp->flock.l_type = GF_LK_F_UNLCK;
959
gf_smsg(THIS->name, GF_LOG_ERROR, 0, PS_MSG_LOCK_ERROR,
960
"lock_type=%" PRId32, tmp->flock.l_type, NULL);
964
gf_proto_flock_from_flock(&trav->flock, &tmp->flock);
966
trav->lk_flags = tmp->lk_flags;
968
trav->client_uid = tmp->client_uid;
971
prev->nextentry = trav;
986
serialize_rsp_locklist_v2(lock_migration_info_t *locklist,
987
gfx_getactivelk_rsp *rsp)
991
GF_VALIDATE_OR_GOTO("server", rsp, out);
992
ret = common_rsp_locklist(locklist, &rsp->reply);
998
getactivelkinfo_rsp_cleanup_v2(gfx_getactivelk_rsp *rsp)
1000
gfs3_locklist *prev = NULL;
1001
gfs3_locklist *trav = NULL;
1007
trav = trav->nextentry;
1016
gf_server_check_getxattr_cmd(call_frame_t *frame, const char *key)
1018
server_conf_t *conf = NULL;
1019
rpc_transport_t *xprt = NULL;
1021
conf = frame->this->private;
1025
if (fnmatch("*list*mount*point*", key, 0) == 0) {
1027
pthread_mutex_lock(&conf->mutex);
1029
list_for_each_entry(xprt, &conf->xprt_list, list)
1031
gf_smsg("mount-point-list", GF_LOG_INFO, 0,
1032
PS_MSG_MOUNT_PT_FAIL, "identifier=%s",
1033
xprt->peerinfo.identifier, NULL);
1036
pthread_mutex_unlock(&conf->mutex);
1045
gf_server_check_setxattr_cmd(call_frame_t *frame, dict_t *dict)
1047
server_conf_t *conf = NULL;
1048
rpc_transport_t *xprt = NULL;
1049
uint64_t total_read = 0;
1050
uint64_t total_write = 0;
1052
conf = frame->this->private;
1056
if (dict_foreach_fnmatch(dict, "*io*stat*dump", dict_null_foreach_fn,
1058
list_for_each_entry(xprt, &conf->xprt_list, list)
1060
total_read += xprt->total_bytes_read;
1061
total_write += xprt->total_bytes_write;
1063
gf_smsg("stats", GF_LOG_INFO, 0, PS_MSG_RW_STAT, "total-read=%" PRIu64,
1064
total_read, "total-write=%" PRIu64, total_write, NULL);
1071
server_ctx_get(client_t *client, xlator_t *xlator)
1074
server_ctx_t *ctx = NULL;
1075
server_ctx_t *setted_ctx = NULL;
1077
tmp = client_ctx_get(client, xlator);
1084
ctx = GF_CALLOC(1, sizeof(server_ctx_t), gf_server_mt_server_conf_t);
1089
ctx->fdtable = gf_fd_fdtable_alloc();
1091
if (ctx->fdtable == NULL) {
1097
LOCK_INIT(&ctx->fdtable_lock);
1099
setted_ctx = client_ctx_set(client, xlator, ctx);
1100
if (ctx != setted_ctx) {
1101
LOCK_DESTROY(&ctx->fdtable_lock);
1102
GF_FREE(ctx->fdtable);
1112
auth_set_username_passwd(dict_t *input_params, dict_t *config_params,
1116
data_t *allow_user = NULL;
1117
data_t *passwd_data = NULL;
1118
char *username = NULL;
1119
char *password = NULL;
1120
char *brick_name = NULL;
1121
char *searchstr = NULL;
1122
char *username_str = NULL;
1124
char *username_cpy = NULL;
1126
ret = dict_get_str(input_params, "username", &username);
1128
gf_msg_debug("auth/login", 0,
1129
"username not found, returning "
1138
ret = dict_get_str(input_params, "password", &password);
1140
gf_smsg("auth/login", GF_LOG_WARNING, 0, PS_MSG_PASSWORD_NOT_FOUND,
1145
ret = dict_get_str(input_params, "remote-subvolume", &brick_name);
1147
gf_smsg("auth/login", GF_LOG_ERROR, 0,
1148
PS_MSG_REMOTE_SUBVOL_NOT_SPECIFIED, NULL);
1153
ret = gf_asprintf(&searchstr, "auth.login.%s.allow", brick_name);
1159
allow_user = dict_get(config_params, searchstr);
1163
username_cpy = gf_strdup(allow_user->data);
1167
username_str = strtok_r(username_cpy, " ,", &tmp);
1169
while (username_str) {
1170
if (!fnmatch(username_str, username, 0)) {
1171
ret = gf_asprintf(&searchstr, "auth.login.%s.password",
1176
passwd_data = dict_get(config_params, searchstr);
1180
gf_smsg("auth/login", GF_LOG_ERROR, 0, PS_MSG_LOGIN_ERROR,
1186
ret = strcmp(data_to_str(passwd_data), password);
1188
client->auth.username = gf_strdup(username);
1189
client->auth.passwd = gf_strdup(password);
1191
gf_smsg("auth/login", GF_LOG_ERROR, 0, PS_MSG_LOGIN_ERROR,
1192
"username=%s", username, NULL);
1196
username_str = strtok_r(NULL, " ,", &tmp);
1201
GF_FREE(username_cpy);
1207
server_inode_new(inode_table_t *itable, uuid_t gfid)
1209
if (__is_root_gfid(gfid))
1210
return itable->root;
1212
return inode_new(itable);
1216
unserialize_req_locklist_v2(gfx_setactivelk_req *req,
1217
lock_migration_info_t *lmi)
1219
struct gfs3_locklist *trav = NULL;
1220
lock_migration_info_t *temp = NULL;
1223
trav = req->request;
1225
INIT_LIST_HEAD(&lmi->list);
1229
temp = GF_CALLOC(1, sizeof(*lmi), gf_common_mt_lock_mig);
1231
gf_smsg(THIS->name, GF_LOG_ERROR, 0, PS_MSG_NO_MEM, NULL);
1235
INIT_LIST_HEAD(&temp->list);
1237
gf_proto_flock_to_flock(&trav->flock, &temp->flock);
1239
temp->lk_flags = trav->lk_flags;
1241
temp->client_uid = gf_strdup(trav->client_uid);
1243
list_add_tail(&temp->list, &lmi->list);
1245
trav = trav->nextentry;