--- dtcpc.c.orig	2003-10-28 18:50:16.000000000 +0900
+++ dtcpc.c	2003-10-28 20:48:24.000000000 +0900
@@ -77,10 +77,11 @@
 static int down_tunnel(void);
 static void do_kill(void);
 
-static const char *shortopt = "u:p:t:n:i:c:rvkdh";
+static const char *shortopt = "u:P:p:t:n:i:c:rvkdh";
 enum {
 	__OPT_MIN = 0xff,
 	OPT_USER,
+	OPT_PASS,
 	OPT_PORT,
 	OPT_TUNNEL,
 	OPT_NETDEV,
@@ -97,6 +98,7 @@
 static struct option const longopt[] = 
 {
 	{"user",             required_argument, NULL, OPT_USER},
+	{"password",         required_argument, NULL, OPT_PASS},
 	{"port",             required_argument, NULL, OPT_PORT},
 	{"tunnel",           required_argument, NULL, OPT_TUNNEL},
 	{"network-device",   required_argument, NULL, OPT_NETDEV},
@@ -120,6 +122,7 @@
 		"\t       -i dev: specify interfac ename(default: dtcp)\n"
 		"\t       -d: debug\n"
 		"\t       -u: username\n"
+		"\t       -P: password\n"
 		"\t       -p port: connect port instead of default\n"
 		"\t       -t tunnel type: specify tunnel type (default 'host')\n"
 		"\t       -n netdev (default 'eth0')\n"
@@ -152,6 +155,7 @@
 	char strport[6]; /* short */
 	struct chap_id ci;
 	char  *user = NULL;
+	char  *pass = NULL;
 	char tuntype[16] = DEFAULT_TUNTYPE;
 	int interval = DEFAULT_INTERVAL;
 	pid_t pid;
@@ -176,6 +180,13 @@
 			strncpy(user, optarg, strlen(optarg)+1);
 			ci.username = user;
 			break;
+		case 'P':
+		case OPT_PASS:
+			pass = (char *)malloc(strlen(optarg)+1);
+			strncpy(pass, optarg, strlen(optarg)+1);
+			strncpy(optarg, "****************", strlen(optarg));
+			ci.password = pass;
+			break;
 		case 'p':
 		case OPT_PORT:
 			strncpy(strport, optarg, sizeof(strport)-1);
@@ -269,7 +280,11 @@
 	ci.username = user;
 	if (debug) printf("User: %s\n", ci.username);
 
-	ci.password = getpass("DTCP Account Password > ");
+	if (!pass) {
+		pass = getpass("DTCP Account Password > ");
+
+	}
+	ci.password = pass;
 	if (debug) printf("Password: %s\n", ci.password);
 
 	ci.challenge = get_chap_challenge(sockfd);

