Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

groupadmin.cc

Go to the documentation of this file.
00001 /*************************************************************************/
00002 /*  LDAPCONF - Linuxconf module for LDAP operation.
00003     
00004     Copyright (C) 1999,2000,2001 Stein Vråle <stein@terminator.net>
00005 
00006     This program is distributed in the hope that it will be useful,
00007     but WITHOUT ANY WARRANTY; without even the implied warranty of
00008     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
00009     GNU General Public License for more details.
00010     
00011 **************************************************************************/
00012 /*  GROUPADMIN.cc
00013 
00014     Dialogs for group management.
00015 
00016 **************************************************************************/
00017 #include "ldapconf_defs.h"
00018 #include <subsys.h>
00019 #include <confdb.h>
00020 
00021 /*
00022 
00023   Dialog for group managment.
00024 
00025 */
00026 void ldap_groupadmin(const char *profile_name)
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 }
00095 
00096 /*
00097 
00098   Dialog for group managment.
00099   Return 1 = Save
00100   Return 0 = Cancel
00101 
00102 */
00103 int group_admin(const char *profile_name,const char *group_name,SSTRINGS &members,SSTRINGS &allusers)
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 }
00182 
00183 
00184 
00185 
00186 
00187 
00188 
00189 
00190 
00191 
00192 

Generated at Mon Jan 22 08:35:10 2001 for ldapconf by doxygen1.2.1 written by Dimitri van Heesch, © 1997-2000