#include "ldapconf_defs.h"#include <subsys.h>#include <confdb.h>Go to the source code of this file.
Functions | |
| void | ldap_groupadmin (const char *profile_name) |
| int | group_admin (const char *profile_name,const char *group_name,SSTRINGS &members,SSTRINGS &allusers) |
|
|
Definition at line 26 of file groupadmin.cc. Referenced by ldap_usermenu(). 00027 {
00028 LDAPOBJECT ldap;
00029 SSTRINGS group_list;
00030 SSTRINGS user_list;
00031 SSTRINGS member_list;
00032 SSTRING mainbase;
00033 int n;
00034
00035 /* Load profile */
00036 ldap.load_profile(profile_name);
00037 mainbase.setfrom(ldap.base.get());
00038
00039 DIALOG_RECORDS dia;
00040
00041 // Find all groups
00042 group_list.remove_all();
00043 ldap.filter.setfrom("cn=*");
00044 ldap.base.setfromf("%s,%s",ldap.group_prefix.get(),mainbase.get());
00045 n = ldap.search_list_val(group_list,"cn");
00046
00047 // Find all users
00048 member_list.remove_all();
00049 ldap.filter.setfrom("uid=*");
00050 ldap.base.setfromf("%s,%s",ldap.dn_prefix.get(),mainbase.get());
00051 n = ldap.search_list_val(user_list,"uid");
00052
00053 dia.newf_head ("",MSG_U(H_GROUPS,"Groups"));
00054
00055 int nof = 0;
00056 while (1) {
00057
00058 group_list.sort();
00059
00060 for (int i=0; i<group_list.getnb(); i++){
00061 dia.set_menuitem (i,group_list.getitem(i)->get(),"");
00062 }
00063 dia.remove_last(group_list.getnb()+1);
00064
00065 MENU_STATUS code = dia.editmenu (MSG_U(T_GROUP_LIST,"Group list")
00066 ,MSG_U(I_GROUP_LIST,"Select a group")
00067 ,help_groupadmin
00068 ,nof
00069 ,0);
00070
00071 if (code == MENU_QUIT || code == MENU_ESCAPE){ /* Exit */
00072 break;
00073 } else if (nof >=0 && nof < group_list.getnb()){
00074
00075 const char *group_name = group_list.getitem(nof)->get();
00076 // Find all members
00077 member_list.remove_all();
00078 ldap.filter.setfromf("cn=%s",group_name);
00079 ldap.base.setfromf("%s,%s",ldap.group_prefix.get(),mainbase.get());
00080 ldap.search();
00081 n = ldap.at_getall("memberuid",member_list);
00082 // Edit group members
00083 if (group_admin(profile_name,group_name,member_list,user_list)){
00084 // Save group members
00085 ldap.at_del("memberuid");
00086 for (int i=0; i<member_list.getnb(); i++){
00087 ldap.at_add("memberuid",member_list.getitem(i)->get());
00088 }
00089 ldap.dn.setfromf("cn=%s,%s,%s",group_name,ldap.group_prefix.get(),mainbase.get());
00090 ldap.modify();
00091 }
00092 }
00093 }
00094 }
|
|
|
Definition at line 103 of file groupadmin.cc. Referenced by ldap_groupadmin(). 00104 {
00105 int ret = 0;
00106 SSTRING addmember;
00107 SSTRING delmember;
00108 SSTRINGS nonmembers;
00109
00110 // Find non-members
00111 for (int i=0; i<allusers.getnb(); i++){
00112 if ( members.lookup(allusers.getitem(i)) < 0 ) { nonmembers.add(new SSTRING (allusers.getitem(i)->get())); }
00113 }
00114
00115 DIALOG dia;
00116
00117
00118 dia.newf_info ("Profile",profile_name);
00119 dia.newf_info("Group ",group_name);
00120
00121 /* Non members */
00122 nonmembers.sort();
00123 FIELD_COMBO *userlist = dia.newf_combo(MSG_U(F_MEMBER_KEY,"Add"),addmember);
00124 for (int i=0; i<nonmembers.getnb(); i++){
00125 userlist->addopt(nonmembers.getitem(i)->get());
00126 }
00127
00128 /* Members */
00129 members.sort();
00130 FIELD_COMBO *memberlist = dia.newf_combo(MSG_U(F_DELMEMBER_KEY,"Delete"),delmember);
00131 for (int i=0; i<members.getnb(); i++){
00132 memberlist->addopt(members.getitem(i)->get());
00133 }
00134 int nof = 0;
00135
00136 while (1) {
00137
00138 // Refresh
00139 members.sort();
00140 nonmembers.sort();
00141 addmember.setfrom("");
00142 delmember.setfrom("");
00143
00144
00145 /* Members */
00146 // dia->newf_head ("","Group");
00147 // dia->newf_head(MSG_U(F_GA_MEMBERS,"Members"),"");
00148
00149 // for (int i=0; i<members.getnb(); i++){
00150 // dia->new_menuitem (members.getitem(i)->get(),"");
00151 // }
00152
00153 MENU_STATUS code = dia.edit (MSG_U(T_GROUP_ADMIN,"Group admin")
00154 ,MSG_U(I_GROUP_ADMIN
00155 ,"You may add or delete members in this group")
00156 ,help_groupadmin
00157 ,nof,MENUBUT_ACCEPT|MENUBUT_SAVE|MENUBUT_CANCEL);
00158
00159 dia.save();
00160 if (code == MENU_CANCEL || code == MENU_ESCAPE){ /* Exit */
00161 break;
00162 } else if (code == MENU_SAVE) {
00163 ret = 1;
00164 break;
00165 } else {
00166 if ( ! addmember.is_empty() ) { // Add member
00167 int n = nonmembers.lookup(addmember.get());
00168 if ( n >= 0) { members.add(new SSTRING (nonmembers.getitem(n)->get())); nonmembers.remove_del(n); }
00169 }
00170 if ( ! delmember.is_empty() ){ // Delete member
00171 int n = members.lookup(delmember.get());
00172 if (n >= 0 ) { nonmembers.add(new SSTRING (members.getitem(n)->get())); members.remove_del(n); }
00173 }
00174 delmember.setfrom ("");
00175 addmember.setfrom ("");
00176 dia.reload();
00177 }
00178 }
00179
00180 return ret;
00181 }
|
1.2.1 written by Dimitri van Heesch,
© 1997-2000