int probe_request(void *recvbuf, int sockfd, struct sockaddr_in recv_addr){ int *getIndex; int i; struct probe_d2s_reply probe_reply; struct group **groupTable; char app_name[D2MCE_APP_NAME_LEN+1] = {0}; char group_name[D2MCE_GROUP_NAME_LEN+1] = {0}; groupTable = (struct group**)getTable(g_GroupTable); memcpy(app_name, recvbuf + sizeof(struct probe_s2d_req), ((struct probe_s2d_req*)recvbuf)->app_len); memcpy(group_name, recvbuf + sizeof(struct probe_s2d_req) + ((struct probe_s2d_req*)recvbuf)->app_len , ((struct probe_s2d_req*)recvbuf)->group_len); getIndex = find_groups(app_name, group_name, &((struct probe_s2d_req*)recvbuf)->group_num); for(i=0; i<((struct probe_s2d_req*)recvbuf)->group_num ; i++){ probe_reply.msg_type = MSG_PROBE_REPLY; strncpy(probe_reply.app_name, groupTable[getIndex[i]]->app_name, D2MCE_APP_NAME_LEN); // memcpy(probe_reply.app_name, groupTable[getIndex[i]]->app_name, strlen(groupTable[getIndex[i]]->app_name)); strncpy(probe_reply.group_name, groupTable[getIndex[i]]->group_name, D2MCE_GROUP_NAME_LEN); // memcpy(probe_reply.group_name, groupTable[getIndex[i]]->group_name, strlen(groupTable[getIndex[i]]->group_name)); probe_reply.group_instance = groupTable[getIndex[i]]->group_instance; probe_reply.ip = groupTable[getIndex[i]]->ip; probe_reply.port = groupTable[getIndex[i]]->port; probe_reply.id = groupTable[getIndex[i]]->id; sendto(sockfd, (void*) &probe_reply, sizeof(struct probe_d2s_reply), 0, (struct sockaddr*) &recv_addr, sizeof(recv_addr)); } free(getIndex); return 1; }
char *user_uid(char *user){ char *c_grp; list *group=find_groups(user); struct group *grp; while(group){ c_grp=group->key; grp=list_find(groups,c_grp); if(grp->uid) return grp->uid; group=group->next; } return NULL; }
/* 0 if it's not specified. 1 if the user doesn't need a password */ int user_nopassword(char *user){ char *c_grp; list *group=find_groups(user); struct group *grp; if(!group) return 0; //user doesn't exist while(group){ c_grp=group->key; grp=list_find(groups,c_grp); if(grp->nopassword) return 1; group=group->next; } return 0; }