summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Schweizer <genstef@gentoo.org>2007-07-07 12:27:43 +0000
committerStefan Schweizer <genstef@gentoo.org>2007-07-07 12:27:43 +0000
commite9cb2b2b87f6a5aaa4877e4f2ca7464b8e833185 (patch)
tree0e6633e04af952f927605faced1a660fab4dfd87 /net-misc/vde/files
parentUpdate man page on "-l" option, fixes bug #168555. Fix some typos, #170691. (diff)
downloadhistorical-e9cb2b2b87f6a5aaa4877e4f2ca7464b8e833185.tar.gz
historical-e9cb2b2b87f6a5aaa4877e4f2ca7464b8e833185.tar.bz2
historical-e9cb2b2b87f6a5aaa4877e4f2ca7464b8e833185.zip
patch to enable unixterm to receive commands from standard input thanks to Adrian Lambeck <adrian@basicsedv.de> in bug 184429
Package-Manager: portage-2.1.3_rc6
Diffstat (limited to 'net-misc/vde/files')
-rw-r--r--net-misc/vde/files/Unixterm_20070403.patch208
-rw-r--r--net-misc/vde/files/digest-vde-2.1.6-r13
2 files changed, 211 insertions, 0 deletions
diff --git a/net-misc/vde/files/Unixterm_20070403.patch b/net-misc/vde/files/Unixterm_20070403.patch
new file mode 100644
index 000000000000..0d5a2a6cb8ee
--- /dev/null
+++ b/net-misc/vde/files/Unixterm_20070403.patch
@@ -0,0 +1,208 @@
+diff -Naur vde2-2.1.6/unixterm/unixterm.c vde2-2.1.6-unixterm/unixterm/unixterm.c
+--- vde2-2.1.6/unixterm/unixterm.c 2006-07-07 16:54:39.000000000 +0200
++++ vde2-2.1.6/unixterm/unixterm.c 2007-04-03 12:49:14.000000000 +0200
+@@ -4,6 +4,8 @@
+ * Minimal terminal emulator on a UNIX stream socket
+ */
+
++/* render: addedd support for stdin commands */
++
+ #include <stdio.h>
+ #include <fcntl.h>
+ #include <stdlib.h>
+@@ -11,10 +13,12 @@
+ #include <sys/poll.h>
+ #include <sys/socket.h>
+ #include <sys/un.h>
+-
++#include <getopt.h>
+ #include <vde.h>
+
+ #define BUFSIZE 1024
++#define LINESIZE 1025
++#define THRESHOLD 4
+ char buf[BUFSIZE];
+
+ int main(int argc,char *argv[])
+@@ -23,25 +27,168 @@
+ int fd;
+ int rv;
+ static struct pollfd pfd[]={
+- {STDIN_FILENO,POLLIN | POLLHUP,0},
+- {STDIN_FILENO,POLLIN | POLLHUP,0}};
++ {STDIN_FILENO,POLLIN | POLLHUP, 0},
++ {STDIN_FILENO,POLLIN | POLLHUP, 0}};
+ static int fileout[]={STDOUT_FILENO,STDOUT_FILENO};
++ int optret;
++ char *sockpath, *sockname;
++ char sentinel = 0;
++ unsigned char injecting = 0;
++ unsigned char optcount = 0;
++ unsigned char failures = 0;
++ unsigned char loggedout = 0;
++ unsigned char ok_to_write = 0;
++
++ /* options management loop */
++ while (1) {
++ static struct option options[] = {
++ {"inject", 0, 0, 0}, /* get command list from stdin */
++ {"socket", 1, 0, 0}, /* management socket */
++ {0, 0, 0, 0} /* default case */
++ };
++ int option_index = 0;
++
++ if ((optret = getopt_long (argc, argv, "is:", options, &option_index)) == -1)
++ break;
++
++ optcount++;
++
++ switch (optret) {
++ case 0:
++ switch (option_index) {
++ case 0:
++ injecting = 1;
++ break;
++ case 1:
++ if ((sockpath = strdup(optarg)) == NULL)
++ fprintf(stderr, "strdup error\n");
++ sockname = (char *)basename(sockpath);
++ break;
++ default:
++ fprintf(stderr, "unknown long option\n");
++ break;
++ }
++
++ break;
++
++ case 'i':
++ injecting = 1;
++ break;
++
++ case 's':
++ if ((sockpath = strdup(optarg)) == NULL)
++ fprintf(stderr, "strdup error\n");
++ sockname = (char *)basename(sockpath);
++ break;
++
++ case '?':
++ fprintf(stderr, "unknown short option\n");
++ break;
++
++ default:
++ fprintf(stderr, "default case!\n");
++ break;
++ }
++ }
++
+ sun.sun_family=PF_UNIX;
+- snprintf(sun.sun_path,sizeof(sun.sun_path),"%s",argv[1]);
++ snprintf(sun.sun_path,sizeof(sun.sun_path),"%s", optcount ? sockpath : argv[1]);
++
+ fd=socket(PF_UNIX,SOCK_STREAM,0);
+- rv=connect(fd,(struct sockaddr *)(&sun),sizeof(sun));
++
++ if (connect(fd, (struct sockaddr *)(&sun), sizeof(sun)) < 0) {
++ perror("connect");
++ exit(-1);
++ }
++
+ pfd[1].fd=fileout[0]=fd;
++
+ while(1) {
+- int m,i,n=poll(pfd,2,-1);
+- for(i=0;n>0;i++) {
+- if(pfd[i].revents & POLLHUP)
+- exit(0);
++ int ccount,m,i,n = poll(pfd,2,-1);
++ for(i = 0; n > 0; i++) {
+ if(pfd[i].revents & POLLIN) {
+- n--;
+- if((m=read(pfd[i].fd,buf,BUFSIZE)) == 0)
++ --n;
++ if (injecting) {
++ switch (i) {
++ case 0:
++ if (!feof(stdin)) {
++ ccount = 0;
++
++ if (sentinel > 0) {
++ buf[ccount] = sentinel;
++ ccount++;
++ }
++
++ while ((buf[ccount] = fgetc(stdin)) != '\n' && !feof(stdin))
++ ccount++;
++ /* avoid write of empty lines */
++ if ((ccount > 0) && (buf[0] != '\n')) {
++ write(fileout[i],buf,ccount);
++ }
++ sentinel = fgetc(stdin);
++ }
++ /* end of stdin: logout from management console */
++ if (feof(stdin) && !loggedout) {
++ write(fileout[i],"logout\n",strlen("logout\n"));
++ loggedout = 1;
++ }
++
++ break;
++ case 1: {
++ int cursor = 0;
++ int base = 0;
++ char line[LINESIZE];
++ unsigned char start = 1;
++
++ if ((m = read(pfd[i].fd,buf,BUFSIZE)) == 0)
++ exit(0);
++
++ while (cursor < m) {
++ while ((buf[cursor] != '\n') && (cursor <= m))
++ cursor++;
++
++ memcpy(line, &buf[base], cursor - base + 1);
++
++ if (!ok_to_write && (start = (strstr(line, "0000 DATA") == NULL))) {
++ base += (cursor - base) + 1;
++ cursor += 1;
++ } else {
++ if (ok_to_write && (strstr(line, ".\n") != NULL)) {
++ ok_to_write = 0;
++ }
++
++ if (ok_to_write) {
++ write(fileout[i],sockname, strlen(sockname));
++ write(fileout[i],": ", 2);
++ write(fileout[i],line,cursor - base + 1);
++ }
++ else {
++ if (!start) {
++ ok_to_write = 1;
++ start = 1;
++ }
++ }
++ base += (cursor - base) + 1;
++ cursor += 1;
++ }
++ }
++
++ break;
++ }
++ }
++ } else {
++ if((m=read(pfd[i].fd,buf,BUFSIZE)) == 0)
++ exit(0);
++
++ write(fileout[i],buf,m);
++ }
++ }
++
++ if(pfd[i].revents & POLLHUP) {
++ --n;
++ if (sentinel > 0)
+ exit(0);
+- write(fileout[i],buf,m);
+ }
+- }
+- }
++ } /* for */
++ } /* infinite while */
+ }
diff --git a/net-misc/vde/files/digest-vde-2.1.6-r1 b/net-misc/vde/files/digest-vde-2.1.6-r1
new file mode 100644
index 000000000000..21b986fdd60b
--- /dev/null
+++ b/net-misc/vde/files/digest-vde-2.1.6-r1
@@ -0,0 +1,3 @@
+MD5 68a9a5c4c8cf713bd4d97acc1eb341a6 vde2-2.1.6.tar.bz2 390222
+RMD160 083be75c89c5915ce7fa8a2b300a09af49e793cd vde2-2.1.6.tar.bz2 390222
+SHA256 4a4664346e357e95f3113af6d72878d57e0ef5d493d476ec49870376a2ee00e7 vde2-2.1.6.tar.bz2 390222