1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #include <glib.h>
- #include <gdk/gdk.h>
- #include <gtk/gtkwindow.h>
- #include <gtk/gtkmain.h>
- #include <gtk/gtkbutton.h>
- #include <gtk/gtkvbox.h>
- #include <gtk/gtklabel.h>
- #include <gtk/gtkentry.h>
- #include <gtk/gtksignal.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <syslog.h>
- int outfd;
- int err;
- static void okpressed(void *widget, void *clientdata)
- {
- GtkWidget *answer=clientdata;
- gchar *pass;
- int passlen;
- ssize_t wrote;
- (void)widget;
- pass=gtk_entry_get_text(GTK_ENTRY(answer));
- passlen=strlen(pass);
- if(!passlen)
- return;
- if((wrote=write(outfd, pass, passlen))!=passlen) {
- if(wrote<0)
- syslog(LOG_ERR, "write error on outpipe: %m");
- else
- syslog(LOG_ERR, "short write on outpipe");
- err=1;
- }
- gtk_main_quit();
- }
- int main(int argc, char **argv)
- {
- GtkWidget *mainwindow, *vbox, *question, *answer, *ok;
- char buf[1024];
- gtk_init(&argc, &argv);
- openlog(argv[0], LOG_PID, LOG_DAEMON);
- if(argc!=4) {
- syslog(LOG_WARNING, "Usage error");
- return 1;
- }
- outfd=atoi(argv[3]);
- mainwindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(mainwindow), "pppgetpass");
- gtk_signal_connect(GTK_OBJECT(mainwindow), "destroy",
- GTK_SIGNAL_FUNC(gtk_main_quit), 0);
- vbox=gtk_vbox_new(FALSE, 5);
- gtk_container_add(GTK_CONTAINER(mainwindow), vbox);
- gtk_widget_show(vbox);
- if(argv[1][0] && argv[2][0])
- snprintf(buf, sizeof buf, "Password for PPP client %s on server %s: ", argv[1], argv[2]);
- else if(argv[1][0] && !argv[2][0])
- snprintf(buf, sizeof buf, "Password for PPP client %s: ", argv[1]);
- else if(!argv[1][0] && argv[2][0])
- snprintf(buf, sizeof buf, "Password for PPP on server %s: ", argv[2]);
- else
- snprintf(buf, sizeof buf, "Enter PPP password: ");
- question=gtk_label_new(buf);
- gtk_box_pack_start(GTK_BOX(vbox), question, FALSE, TRUE, 0);
- gtk_widget_show(question);
- answer=gtk_entry_new();
- gtk_entry_set_visibility(GTK_ENTRY(answer), 0);
- gtk_box_pack_start(GTK_BOX(vbox), answer, FALSE, TRUE, 0);
- gtk_widget_show(answer);
- ok=gtk_button_new_with_label("OK");
- gtk_box_pack_start(GTK_BOX(vbox), ok, FALSE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(ok), "clicked",
- GTK_SIGNAL_FUNC(okpressed), answer);
- gtk_widget_show(ok);
- gtk_widget_show(mainwindow);
- gtk_main();
- return err;
- }
|