aboutsummaryrefslogtreecommitdiff
path: root/floppyd.c
diff options
context:
space:
mode:
Diffstat (limited to 'floppyd.c')
-rw-r--r--floppyd.c134
1 files changed, 68 insertions, 66 deletions
diff --git a/floppyd.c b/floppyd.c
index 0dee036..1601271 100644
--- a/floppyd.c
+++ b/floppyd.c
@@ -23,7 +23,7 @@
*
* udbz@rz.uni-karlsruhe.de
*
- * Large parts of the network code shamelessly stolen from
+ * Large parts of the network code shamelessly stolen from
* transproxy by John Saunders <john@nlc.net.au>
*
* Rewritten in C by Alain Knaff. Apparently C++ is still not as
@@ -66,7 +66,7 @@
Client sends his protocol-version. If the version between server and client
differ: bail out.
- After that,we send our .Xauthority-file (a maximum of MAX_XAUTHORITY_LENGTH
+ After that,we send our .Xauthority-file (a maximum of MAX_XAUTHORITY_LENGTH
Bytes long) to the server.
The server then checks, if it already has a .Xauthority file. If so
@@ -98,7 +98,7 @@
read the expected bytes from the socket stream. Don't know
why this is necessary. Maybe the socket stream is nonblocking
or something IT SHOULD NOT BE!
-
+
*/
@@ -108,7 +108,7 @@
unsigned int mtools_lock_timeout=30;
-void serve_client(int sock, char **device_name, unsigned int n_dev,
+void serve_client(int sock, const char *const*device_name, unsigned int n_dev,
int close_stderr);
@@ -116,11 +116,11 @@ void serve_client(int sock, char **device_name, unsigned int n_dev,
typedef struct io_buffer {
Byte out_buffer[BUFFERED_IO_SIZE];
Byte in_buffer[BUFFERED_IO_SIZE];
-
+
size_t in_valid;
size_t in_start;
size_t out_valid;
-
+
int handle;
} *io_buffer;
@@ -153,15 +153,15 @@ static void free_io_buffer(io_buffer buffer) {
static size_t buf_read (io_buffer buf, Byte* buffer, size_t nbytes) {
size_t ret;
-
+
if (nbytes <= buf->in_valid) {
memcpy(buffer, buf->in_buffer+buf->in_start, nbytes);
buf->in_valid -= nbytes;
buf->in_start += nbytes;
ret = nbytes;
} else {
- if (buf->in_valid)
- memcpy(buffer, buf->in_buffer+buf->in_start,
+ if (buf->in_valid)
+ memcpy(buffer, buf->in_buffer+buf->in_start,
buf->in_valid);
nbytes -= buf->in_valid;
buffer += buf->in_valid;
@@ -175,7 +175,7 @@ static size_t buf_read (io_buffer buf, Byte* buffer, size_t nbytes) {
}
buf->in_valid = buf->in_start = 0;
} else {
- ssize_t rval = read(buf->handle, buf->in_buffer,
+ ssize_t rval = read(buf->handle, buf->in_buffer,
BUFFERED_IO_SIZE);
if (rval >= 0) {
if (rval < (ssize_t) nbytes) {
@@ -251,16 +251,16 @@ static Dword read_dword(io_buffer fp)
if (buf_read(fp, val, 4) < 4) {
return 0xffffffff;
}
-
+
return byte2dword(val);
}
static void write_dword(io_buffer fp, Dword parm)
{
Byte val[4];
-
+
dword2byte(parm, val);
-
+
buf_write(fp, val,4);
}
@@ -320,7 +320,7 @@ static char send_packet(Packet packet, io_buffer fp)
fprintf(stderr, "%d ", packet->data[i]);
}
fprintf(stderr, "\n");
-#endif
+#endif
}
return (packet->data != NULL);
@@ -351,14 +351,14 @@ static char recv_packet(Packet packet, io_buffer fp, Dword maxlength)
#if DEBUG
fprintf(stderr, "*** read: %li\n", packet->len);
#endif
-
+
#if DEBUG
fprintf(stderr, "recv_packet(): ");
for (i = 0; i < packet->len; i++) {
fprintf(stderr, "%d ", packet->data[i]);
}
fprintf(stderr, "\n");
-#endif
+#endif
return 1;
}
@@ -386,11 +386,11 @@ static void put_qword(Packet packet, int my_index, Qword val) {
static Dword get_dword(Packet packet, int my_index) {
return byte2dword(packet->data+my_index);
-}
+}
static Qword get_qword(Packet packet, int my_index) {
return byte2qword(packet->data+my_index);
-}
+}
static Dword get_length(Packet packet) {
return packet->len;
@@ -398,7 +398,7 @@ static Dword get_length(Packet packet) {
static int eat(unsigned char **ptr, size_t *len, unsigned char c) {
/* remove length + size code + terminating 0 */
- if (*len < c + 3)
+ if (*len < c + 3u)
return -1;
(*ptr) += c + 2;
(*len) -= c + 2;
@@ -409,7 +409,7 @@ static const char *dispName;
static char XAUTHORITY[]="XAUTHORITY";
-static char do_auth(io_buffer sock, unsigned int *version)
+static char do_auth(io_buffer sock, unsigned int *version)
{
int fd;
Display* displ;
@@ -434,7 +434,7 @@ static char do_auth(io_buffer sock, unsigned int *version)
}
*version = get_dword(proto_version, 0);
- if (*version > FLOPPYD_PROTOCOL_VERSION ||
+ if (*version > FLOPPYD_PROTOCOL_VERSION ||
*version < FLOPPYD_PROTOCOL_VERSION_OLD) {
/* fail if client requests a newer version than us */
put_dword(reply, 0, AUTH_WRONGVERSION);
@@ -560,14 +560,14 @@ static uint16_t getportnum(char *portnum)
for (port = 0; isdigit(*digits); ++digits)
{
- port = (port * 10) + (*digits - '0');
+ port = (port * 10) + (uint8_t)(*digits - '0');
}
if ((*digits != '\0') || (port <= 0))
{
if ((serv = getservbyname(portnum, "tcp")) != NULL)
{
- port = ntohs(serv->s_port);
+ port = ntohs((uint16_t)serv->s_port);
}
else
{
@@ -695,7 +695,7 @@ static int bind_to_port(in_addr_t bind_ip, uint16_t bind_port)
*/
{
int on = 1;
- if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
+ if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
(char *)&on, sizeof(on)) < 0) {
perror("setsockopt");
exit(1);
@@ -731,7 +731,7 @@ static int bind_to_port(in_addr_t bind_ip, uint16_t bind_port)
}
static int sockethandle_now = -1;
-
+
/*
* Catch alarm signals and exit.
*/
@@ -750,9 +750,9 @@ static void alarm_signal(int a UNUSEDP)
/*
* This is the main loop when running as a server.
*/
-static void server_main_loop(int sock, char **device_name,
- unsigned int n_dev) NORETURN;
-static void server_main_loop(int sock, char **device_name,
+static void server_main_loop(int sock, const char *const*device_name,
+ unsigned int n_dev) NORETURN;
+static void server_main_loop(int sock, const char *const*device_name,
unsigned int n_dev)
{
struct sockaddr_in addr;
@@ -770,7 +770,7 @@ static void server_main_loop(int sock, char **device_name,
*/
len = sizeof(addr);
while ((new_sock = accept(sock, (struct sockaddr *)&addr, &len)) < 0){}
-
+
/*
* Create a new process to handle the connection.
*/
@@ -781,13 +781,13 @@ static void server_main_loop(int sock, char **device_name,
* Under load conditions just ignore new connections.
*/
break;
-
+
case 0:
/*
* Start the proxy work in the new socket.
*/
#endif
- serve_client(new_sock,device_name, n_dev, 0);
+ serve_client(new_sock, device_name, n_dev, 0);
exit(0);
#if DEBUG == 0
}
@@ -810,7 +810,7 @@ static void usage(char *prog, const char *opt, int ret)
{
fprintf(stderr, "%s: %s\n", prog, opt);
}
- fprintf(stderr, "usage: %s [-s port [-r user] [-b ipaddr]] devicename [Names of local host]\n",
+ fprintf(stderr, "usage: %s [-s port [-r user] [-b ipaddr]] devicename [Names of local host]\n",
prog);
fprintf(stderr, " -d Run as a server (default port 5703 + DISPLAY)\n");
fprintf(stderr, " -s port Run as a server bound to the specified port.\n");
@@ -828,7 +828,7 @@ static char *makeDisplayName(int dispNr)
return strdup(result);
}
-int main (int argc, char** argv)
+int main (int argc, char** argv)
{
int sockfd = 0;
int arg;
@@ -840,7 +840,7 @@ int main (int argc, char** argv)
char* username = strdup("nobody");
int sock;
- char **device_name = NULL;
+ const char *const* device_name = NULL;
const char *floppy0 = "/dev/fd0";
unsigned int n_dev;
@@ -884,10 +884,10 @@ int main (int argc, char** argv)
}
if(optind < argc) {
- device_name = argv + optind;
- n_dev = argc - optind;
+ device_name = (const char * const *) argv + optind;
+ n_dev = (unsigned int) (argc - optind);
} else {
- device_name = (char **)&floppy0;
+ device_name = &floppy0;
n_dev = 1;
}
@@ -895,7 +895,7 @@ int main (int argc, char** argv)
dispName = getenv("DISPLAY");
if(dispName==NULL && bind_port != 0)
dispName=makeDisplayName((unsigned short)(bind_port - 5703));
- if(dispName==NULL)
+ if(dispName==NULL)
dispName=":0";
if(bind_port == 0) {
@@ -908,9 +908,9 @@ int main (int argc, char** argv)
if(!run_as_server) {
struct sockaddr_in addr;
unsigned int len = sizeof(addr);
-
+
/* try to find out port that we are connected to */
- if(getsockname(0, (struct sockaddr*) &addr, &len) >= 0 &&
+ if(getsockname(0, (struct sockaddr*) &addr, &len) >= 0 &&
len == sizeof(addr)) {
bind_port = ntohs(addr.sin_port);
}
@@ -937,7 +937,7 @@ int main (int argc, char** argv)
* Start by binding to the port, the child inherits this socket.
*/
sock = bind_to_port(bind_ip, bind_port);
-
+
/*
* Start a server process. When DEBUG is defined, just run
* in the foreground.
@@ -951,7 +951,7 @@ int main (int argc, char** argv)
case -1:
perror("fork()");
exit(1);
-
+
case 0:
/*
* Ignore some signals.
@@ -965,14 +965,14 @@ int main (int argc, char** argv)
signal(SIGCONT, SIG_IGN);
signal(SIGPIPE, alarm_signal);
/*signal(SIGALRM, alarm_signal);*/
-
+
/*
* Drop back to an untrusted user.
*/
setgid(run_gid);
initgroups(username, run_gid);
setuid(run_uid);
-
+
/*
* Start a new session and group.
*/
@@ -994,7 +994,7 @@ int main (int argc, char** argv)
server_main_loop(sock, device_name,
n_dev);
}
-
+
/*
* Parent exits at this stage.
*/
@@ -1036,7 +1036,7 @@ static void send_reply64(int rval, io_buffer sock, mt_off_t len) {
Packet reply = newPacket();
make_new(reply, 12);
- put_qword(reply, 0, len);
+ put_qword(reply, 0, (Qword) len);
if (rval == -1) {
put_dword(reply, 8, 0);
} else {
@@ -1054,8 +1054,8 @@ static void cleanup(int x UNUSEDP) {
#include "lockdev.h"
-void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
- int close_stderr) {
+void serve_client(int sockhandle, const char *const*device_name,
+ unsigned int n_dev, int close_stderr) {
Packet opcode;
Packet parm;
@@ -1066,13 +1066,13 @@ void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
unsigned int version;
int needSendReply=0;
int rval=0;
-
+
/*
* Set the keepalive socket option to on.
*/
{
int on = 1;
- if(setsockopt(sockhandle, SOL_SOCKET,
+ if(setsockopt(sockhandle, SOL_SOCKET,
SO_KEEPALIVE, (char *)&on, sizeof(on)) < 0) {
perror("setsockopt");
exit(1);
@@ -1089,12 +1089,12 @@ void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
#endif
sock = new_io_buffer(sockhandle);
-
+
/*
* Allow 60 seconds for any activity.
*/
alarm(60);
-
+
version = 0;
if (!do_auth(sock, &version)) {
free_io_buffer(sock);
@@ -1122,10 +1122,10 @@ void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
/* old protocol */
readOnly = 0;
devFd = open(device_name[0], O_RDWR|O_LARGEFILE);
-
+
if (devFd < 0) {
readOnly = 1;
- devFd = open(device_name[0],
+ devFd = open(device_name[0],
O_RDONLY|O_LARGEFILE);
}
if(devFd < 0) {
@@ -1228,17 +1228,18 @@ void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
} else {
rval = write_packet(parm, devFd);
}
- send_reply(devFd, sock, rval);
+ send_reply(devFd, sock, (Dword) rval);
break;
case OP_SEEK:
#if DEBUG
fprintf(stderr, "SEEK:\n");
#endif
- lseek(devFd,
- get_dword(parm, 0), get_dword(parm, 4));
- send_reply(devFd,
- sock,
+ lseek(devFd,
+ (off_t) get_dword(parm, 0),
+ (int) get_dword(parm, 4));
+ send_reply(devFd,
+ sock,
(Dword) lseek(devFd, 0, SEEK_CUR));
break;
case OP_SEEK64:
@@ -1253,10 +1254,11 @@ void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
#if DEBUG
fprintf(stderr, "SEEK64:\n");
#endif
- mt_lseek(devFd,
- get_qword(parm,0), get_dword(parm,8));
- send_reply64(devFd,
- sock,
+ mt_lseek(devFd,
+ (mt_off_t) get_qword(parm,0),
+ (int) get_dword(parm,8));
+ send_reply64(devFd,
+ sock,
mt_lseek(devFd, 0, SEEK_CUR));
break;
case OP_FLUSH:
@@ -1293,7 +1295,7 @@ void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
alarm(0);
}
-
+
#if DEBUG
fprintf(stderr, "Closing down...\n");
@@ -1318,10 +1320,10 @@ void serve_client(int sockhandle, char **device_name, unsigned int n_dev,
#else
#include <stdio.h>
-int main(int argc, char **argv)
+int main(int argc, char **argv)
{
puts("Floppyd support not included!");
return -1;
}
-
+
#endif