pppgetpass.gtk.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include <glib.h>
  2. #include <gdk/gdk.h>
  3. #include <gtk/gtkwindow.h>
  4. #include <gtk/gtkmain.h>
  5. #include <gtk/gtkbutton.h>
  6. #include <gtk/gtkvbox.h>
  7. #include <gtk/gtklabel.h>
  8. #include <gtk/gtkentry.h>
  9. #include <gtk/gtksignal.h>
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <stdlib.h>
  13. #include <unistd.h>
  14. #include <syslog.h>
  15. int outfd;
  16. int err;
  17. static void okpressed(void *widget, void *clientdata)
  18. {
  19. GtkWidget *answer=clientdata;
  20. gchar *pass;
  21. int passlen;
  22. ssize_t wrote;
  23. (void)widget;
  24. pass=gtk_entry_get_text(GTK_ENTRY(answer));
  25. passlen=strlen(pass);
  26. if(!passlen)
  27. return;
  28. if((wrote=write(outfd, pass, passlen))!=passlen) {
  29. if(wrote<0)
  30. syslog(LOG_ERR, "write error on outpipe: %m");
  31. else
  32. syslog(LOG_ERR, "short write on outpipe");
  33. err=1;
  34. }
  35. gtk_main_quit();
  36. }
  37. int main(int argc, char **argv)
  38. {
  39. GtkWidget *mainwindow, *vbox, *question, *answer, *ok;
  40. char buf[1024];
  41. gtk_init(&argc, &argv);
  42. openlog(argv[0], LOG_PID, LOG_DAEMON);
  43. if(argc!=4) {
  44. syslog(LOG_WARNING, "Usage error");
  45. return 1;
  46. }
  47. outfd=atoi(argv[3]);
  48. mainwindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
  49. gtk_window_set_title(GTK_WINDOW(mainwindow), "pppgetpass");
  50. gtk_signal_connect(GTK_OBJECT(mainwindow), "destroy",
  51. GTK_SIGNAL_FUNC(gtk_main_quit), 0);
  52. vbox=gtk_vbox_new(FALSE, 5);
  53. gtk_container_add(GTK_CONTAINER(mainwindow), vbox);
  54. gtk_widget_show(vbox);
  55. if(argv[1][0] && argv[2][0])
  56. snprintf(buf, sizeof buf, "Password for PPP client %s on server %s: ", argv[1], argv[2]);
  57. else if(argv[1][0] && !argv[2][0])
  58. snprintf(buf, sizeof buf, "Password for PPP client %s: ", argv[1]);
  59. else if(!argv[1][0] && argv[2][0])
  60. snprintf(buf, sizeof buf, "Password for PPP on server %s: ", argv[2]);
  61. else
  62. snprintf(buf, sizeof buf, "Enter PPP password: ");
  63. question=gtk_label_new(buf);
  64. gtk_box_pack_start(GTK_BOX(vbox), question, FALSE, TRUE, 0);
  65. gtk_widget_show(question);
  66. answer=gtk_entry_new();
  67. gtk_entry_set_visibility(GTK_ENTRY(answer), 0);
  68. gtk_box_pack_start(GTK_BOX(vbox), answer, FALSE, TRUE, 0);
  69. gtk_widget_show(answer);
  70. ok=gtk_button_new_with_label("OK");
  71. gtk_box_pack_start(GTK_BOX(vbox), ok, FALSE, TRUE, 0);
  72. gtk_signal_connect(GTK_OBJECT(ok), "clicked",
  73. GTK_SIGNAL_FUNC(okpressed), answer);
  74. gtk_widget_show(ok);
  75. gtk_widget_show(mainwindow);
  76. gtk_main();
  77. return err;
  78. }