Index: cfgfile.c =================================================================== RCS file: /cvs/gpe/base/gpe-conf/cfgfile.c,v retrieving revision 1.13 diff -u -r1.13 cfgfile.c --- cfgfile.c 29 Aug 2004 13:20:25 -0000 1.13 +++ cfgfile.c 16 Oct 2004 15:50:30 -0000 @@ -436,26 +436,28 @@ iflen = l; fd = fopen(_PATH_PROCNET_WIRELESS, "r"); - fgets(buffer, 256, fd); // chuck first two lines; - fgets(buffer, 256, fd); - while (!feof(fd)) { - if (fgets(buffer, 256, fd) == NULL) - break; - name = buffer; - sep = strrchr(buffer, ':'); - if (sep) *sep = 0; - while(*name == ' ') name++; - - for (i = 0; i < iflen; i++) - { - if (!strcmp (name, iflist[i].name)) + if (fd) + { + fgets(buffer, 256, fd); // chuck first two lines; + fgets(buffer, 256, fd); + while (!feof(fd)) { + if (fgets(buffer, 256, fd) == NULL) + break; + name = buffer; + sep = strrchr(buffer, ':'); + if (sep) *sep = 0; + while(*name == ' ') name++; + + for (i = 0; i < iflen; i++) { - iflist[i].iswireless = TRUE; + if (!strcmp (name, iflist[i].name)) + { + iflist[i].iswireless = TRUE; + } } } + fclose(fd); } - fclose(fd); - return l; } Index: main.c =================================================================== RCS file: /cvs/gpe/base/gpe-conf/main.c,v retrieving revision 1.69 diff -u -r1.69 main.c --- main.c 10 Oct 2004 21:48:39 -0000 1.69 +++ main.c 16 Oct 2004 15:50:30 -0000 @@ -188,6 +188,9 @@ self.cur_applet = i; self.applet = applets[i].Build_Objects(useronly); + + if (self.applet) + { gtk_container_add(GTK_CONTAINER(self.viewport),self.applet); gtk_window_set_title(GTK_WINDOW(self.w), applets[i].frame_label); @@ -220,6 +223,7 @@ } else gtk_widget_hide(self.cancel); + } } @@ -289,9 +293,11 @@ void main_one(int argc, char **argv,int applet) { int handled = FALSE; - gboolean user_only_setup = FALSE; /* Don't change to suid mode. */ + gboolean special_flag = FALSE; /* Don't change to suid mode or similar. */ + gboolean standalone = FALSE; /* applet creates its own window */ self.alone_applet = 1; + self.applet = NULL; my_icons[count_icons - 1].filename = applets[applet].icon_file; @@ -315,7 +321,12 @@ } if (!strcmp(argv[2],"user_only")) { - user_only_setup = TRUE; + special_flag = TRUE; + } + if (!strcmp(argv[2],"password")) + { + special_flag = TRUE; + standalone = TRUE; } if (!strcmp(argv[1],"task_sound")) { @@ -331,23 +342,23 @@ /* If no task? - start applet */ if (!handled) { - initwindow(); - - self.vbox = gtk_vbox_new(FALSE,0); - gtk_container_add(GTK_CONTAINER(self.w),self.vbox); - self.cur_applet = -1; - self.applet = NULL; - - make_container(); - - gpe_set_window_icon(self.w, "icon"); - gtk_widget_show_all(self.w); - - gtk_widget_show(self.w); - + self.applet = NULL; if (!standalone) + { + initwindow(); + + self.vbox = gtk_vbox_new(FALSE,0); + gtk_container_add(GTK_CONTAINER(self.w),self.vbox); + + make_container(); + + gpe_set_window_icon(self.w, "icon"); + gtk_widget_show_all(self.w); + + gtk_widget_show(self.w); + } - item_select(user_only_setup, (gpointer)applet); + item_select(special_flag, (gpointer)applet); gtk_main(); gtk_exit(0); } Index: network.c =================================================================== RCS file: /cvs/gpe/base/gpe-conf/network.c,v retrieving revision 1.37 diff -u -r1.37 network.c --- network.c 8 Sep 2004 22:14:12 -0000 1.37 +++ network.c 16 Oct 2004 15:50:30 -0000 @@ -123,9 +123,34 @@ free (buffer); } +void +copy_new_interfaces(void) +{ + struct interface *ife; + struct interface *int_list; + + int_list = if_getlist (); + + system_printf ("/bin/cp %s %s", NET_NEWFILE, NET_CONFIGFILE); + system_printf ("chmod 0644 %s", NET_CONFIGFILE); + system_printf ("/bin/rm -f %s", NET_NEWFILE); + + for (ife = int_list; ife; ife = ife->next) + { + if ((ife->flags & IFF_UP) && !(ife->flags & IFF_LOOPBACK)) + { + gchar *cmd = g_strdup_printf("/sbin/ifdown %s", ife->name); + system(cmd); + g_free(cmd); + cmd = g_strdup_printf("/sbin/ifup %s", ife->name); + system(cmd); + g_free(cmd); + } + } +} static GList * -get_unconfigured_interfaces () +get_unconfigured_interfaces (void) { #define num_suggestions 3 @@ -139,34 +164,34 @@ gchar suggestions[num_suggestions][6] = {"eth0", "wlan0", "bnep0"}; fd = fopen(_PATH_PROCNET_DEV, "r"); - fgets(buffer, 256, fd); // chuck first two lines; - fgets(buffer, 256, fd); - while (!feof(fd)) { - if (fgets(buffer, 256, fd) == NULL) - break; - name = buffer; - sep = strrchr(buffer, ':'); - if (sep) *sep = 0; - while(*name == ' ') name++; - - found = FALSE; - for (i = 0; i < iflen; i++) - { - if (!strcmp (name, iflist[i].name)) - { - found = TRUE; + if (fd) + { + fgets(buffer, 256, fd); // chuck first two lines; + fgets(buffer, 256, fd); + while (!feof(fd)) { + if (fgets(buffer, 256, fd) == NULL) break; + name = buffer; + sep = strrchr(buffer, ':'); + if (sep) *sep = 0; + while(*name == ' ') name++; + + found = FALSE; + for (i = 0; i < iflen; i++) + { + if (!strcmp (name, iflist[i].name)) + { + found = TRUE; + break; + } + } + if (!found) + { + result = g_list_append (result, g_strdup (name)); } } - if (!found) - { - result = g_list_append (result, g_strdup (name)); - } - - + fclose(fd); } - fclose(fd); - for (j = 0; j < num_suggestions; j++) { found = FALSE; Index: suid.c =================================================================== RCS file: /cvs/gpe/base/gpe-conf/suid.c,v retrieving revision 1.51 diff -u -r1.51 suid.c --- suid.c 12 Oct 2004 21:07:02 -0000 1.51 +++ suid.c 16 Oct 2004 15:50:30 -0000 @@ -45,6 +45,7 @@ #include "cardinfo.h" #include "timeanddate.h" #include "users/passwd.h" +#include "network.h" static GtkWidget *passwd_entry; static int retv; @@ -359,13 +360,7 @@ else if (strcmp (cmd, "CPIF") == 0) // installs a new interfaces file { fscanf (in, "%100s", arg2); // to forget soon... - strcpy (arg1, "/tmp/interfaces"); - strcpy (arg2, "/etc/network/interfaces"); - system ("/etc/init.d/networking stop"); - system_printf ("/bin/cp %s %s", arg1, arg2); - system_printf ("chmod 0644 %s", arg2); - system_printf ("/bin/rm -f %s", arg1); - system ("/etc/init.d/networking start"); + copy_new_interfaces(); } else if (strcmp (cmd, "CPOI") == 0) // rewrites owner information data { Index: network.h =================================================================== RCS file: /cvs/gpe/base/gpe-conf/network.h,v retrieving revision 1.4 diff -u -r1.4 network.h --- network.h 25 Aug 2004 10:16:31 -0000 1.4 +++ network.h 16 Oct 2004 15:50:30 -0000 @@ -1,3 +1,6 @@ +#ifndef _GPE_CONF_NETWORK_H +#define _GPE_CONF_NETWORK_H + #define _PATH_PROCNET_DEV "/proc/net/dev" #define _PATH_PROCNET_WIRELESS "/proc/net/wireless" @@ -5,3 +8,6 @@ void Network_Save(); void Network_Free_Objects(); void Network_Restore(); +void copy_new_interfaces(void); + +#endif Index: users.h =================================================================== RCS file: /cvs/gpe/base/gpe-conf/users.h,v retrieving revision 1.2 diff -u -r1.2 users.h --- users.h 7 Sep 2002 22:34:06 -0000 1.2 +++ users.h 16 Oct 2004 15:50:30 -0000 @@ -1,4 +1,4 @@ -GtkWidget *Users_Build_Objects(); +GtkWidget *Users_Build_Objects(gboolean password_only); void Users_Save(); void Users_Free_Objects(); void Users_Restore(); Index: users/interface.c =================================================================== RCS file: /cvs/gpe/base/gpe-conf/users/interface.c,v retrieving revision 1.22 diff -u -r1.22 interface.c --- users/interface.c 8 Sep 2004 22:14:12 -0000 1.22 +++ users/interface.c 16 Oct 2004 15:50:30 -0000 @@ -202,15 +202,15 @@ } GtkWidget* -Users_Build_Objects (void) +Users_Build_Objects (gboolean password_only) { - GtkWidget *vbox1; - GtkWidget *pw; - GtkWidget *toolbar; - GtkWidget *button1; - GtkWidget *button2; - GtkWidget *button3; - GtkWidget *button4; + GtkWidget *vbox1 = NULL; + GtkWidget *pw = NULL; + GtkWidget *toolbar = NULL; + GtkWidget *button1 = NULL; + GtkWidget *button2 = NULL; + GtkWidget *button3 = NULL; + GtkWidget *button4 = NULL; listTitles[0] = _("User Name"); listTitles[1] = _("User Info"); @@ -218,6 +218,8 @@ InitSpacings (); + if (!password_only) + { vbox1 = gtk_vbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox1), border_width); @@ -254,28 +256,40 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (pw), user_list); + } InitPwList(); - ReloadList(); + if (!password_only) + { + ReloadList(); - gtk_widget_show (user_list); - - gtk_box_pack_start (GTK_BOX (vbox1), pw, TRUE, TRUE, 0); + gtk_widget_show (user_list); + gtk_box_pack_start (GTK_BOX (vbox1), pw, TRUE, TRUE, 0); - /* check if we have the permissions to change users */ - if (suid_exec("CHEK","")) - { - gtk_widget_set_sensitive(user_list, FALSE); - gtk_widget_set_sensitive(button1, FALSE); - gtk_widget_set_sensitive(button2, FALSE); - gtk_widget_set_sensitive(button3, FALSE); - have_access = FALSE; - } + /* check if we have the permissions to change users */ + if (suid_exec("CHEK","")) + { + gtk_widget_set_sensitive(user_list, FALSE); + gtk_widget_set_sensitive(button1, FALSE); + gtk_widget_set_sensitive(button2, FALSE); + gtk_widget_set_sensitive(button3, FALSE); + have_access = FALSE; + } + else + { + have_access = TRUE; + } + } else - { - have_access = TRUE; - } - return vbox1; + have_access = FALSE; + + if (password_only) + { + gtk_widget_show(create_passwindow(pwroot, NULL)); + return NULL; + } + else + return vbox1; } GtkWidget* @@ -440,7 +454,7 @@ } GtkWidget* -create_passwindow (pwlist *init,GtkWidget *parent) +create_passwindow (pwlist *init, GtkWidget *parent) { GtkWidget *passwindow; GtkWidget *vbox3; @@ -463,9 +477,8 @@ gtk_window_set_transient_for (GTK_WINDOW(passwindow), GTK_WINDOW(parent)); gtk_window_set_title (GTK_WINDOW (passwindow), _("Change Password")); gtk_window_set_modal (GTK_WINDOW (passwindow), TRUE); - vbox3 = GTK_DIALOG (passwindow)->vbox; - + table3 = gtk_table_new (3, 3, FALSE); gtk_widget_show (table3); @@ -561,9 +574,12 @@ GTK_SIGNAL_FUNC (users_on_changepasswd_clicked), (gpointer)self); - /* in case of destruction by close (X) button */ - gtk_signal_connect (GTK_OBJECT(passwindow) , "destroy", + if (parent) + gtk_signal_connect (GTK_OBJECT(passwindow) , "destroy", (GtkSignalFunc) freedata, (gpointer)self); + else + gtk_signal_connect (GTK_OBJECT(passwindow) , "destroy", + gtk_main_quit, NULL); return passwindow; }