Remove dgl-wall.c
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@440 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
parent
e63075f995
commit
fd4f6161e5
128
dgl-wall.c
128
dgl-wall.c
|
@ -1,128 +0,0 @@
|
|||
/* dgl-wall sends a message to all logged in users. If you specified a
|
||||
* configuration file to dgamelaunch, you must do so as well for dgl-wall,
|
||||
* or else the message won't be sent. */
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <dirent.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include "dgamelaunch.h"
|
||||
|
||||
int
|
||||
main (int argc, char** argv)
|
||||
{
|
||||
int c, i, len;
|
||||
char buf[82], *ptr = buf, *from = NULL;
|
||||
struct dg_game ** games = NULL;
|
||||
struct flock fl = { 0 };
|
||||
struct passwd* pw = getpwuid(getuid());
|
||||
FILE* spool = NULL;
|
||||
|
||||
fl.l_type = F_WRLCK;
|
||||
fl.l_whence = SEEK_SET;
|
||||
fl.l_start = 0;
|
||||
fl.l_len = 0;
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
while ((c = getopt(argc, argv, "f:F:")) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'f':
|
||||
config = strdup(optarg);
|
||||
break;
|
||||
case 'F':
|
||||
from = strdup(optarg);
|
||||
break;
|
||||
default:
|
||||
goto usage;
|
||||
}
|
||||
}
|
||||
|
||||
if (from == NULL)
|
||||
from = pw->pw_name;
|
||||
|
||||
while (optind < argc)
|
||||
{
|
||||
if (strlen(buf) != 0)
|
||||
strlcat (buf, " ", sizeof(buf));
|
||||
strlcat (buf, argv[optind++], sizeof(buf));
|
||||
}
|
||||
if (strlen(buf) > 80)
|
||||
{
|
||||
fprintf(stderr, "Error: Message is too long! (80 chars max)\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strlen(buf) == 0)
|
||||
{
|
||||
usage:
|
||||
fprintf(stderr, "Usage: %s [-f config] [-F fromname] message\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
create_config();
|
||||
|
||||
if (chroot (globalconfig.chroot))
|
||||
{
|
||||
perror("Couldn't change root directory");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (chdir ("/"))
|
||||
{
|
||||
perror("Couldn't chdir to root directory");
|
||||
return 1;
|
||||
}
|
||||
|
||||
games = populate_games (-1, &len);
|
||||
|
||||
if (len == 0)
|
||||
{
|
||||
fprintf(stderr, "Error: no one's logged in!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
char* fname = NULL;
|
||||
size_t len;
|
||||
|
||||
len = strlen(myconfig[0]->spool) + strlen(games[i]->name) + 2;
|
||||
fname = malloc (len + 1);
|
||||
|
||||
snprintf(fname, len, "%s/%s", myconfig[0]->spool, games[i]->name);
|
||||
|
||||
if ((spool = fopen(fname, "a")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "Warning: couldn't open mailbox for %s.\n", games[i]->name);
|
||||
free (fname);
|
||||
continue;
|
||||
}
|
||||
|
||||
while (fcntl (fileno(spool), F_SETLK, &fl) == -1)
|
||||
{
|
||||
if (errno != EAGAIN)
|
||||
fprintf (stderr, "Warning: fcntl errored out trying to lock mailbox for %s\n",
|
||||
games[i]->name);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
/* Now that we have the lock, begin the write */
|
||||
|
||||
fprintf(spool, "%s:%s\n", from, buf);
|
||||
fclose(spool);
|
||||
free(fname);
|
||||
}
|
||||
|
||||
puts("Message sent successfully.");
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue