93 lines
2.4 KiB
C
93 lines
2.4 KiB
C
|
#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;
|
||
|
}
|