]> git.pld-linux.org Git - projects/setup.git/blame - update-fstab.c
add etc/sub[ug]id
[projects/setup.git] / update-fstab.c
CommitLineData
a904c8c2 1/*
a904c8c2 2 * adds devmode and devgid to usbfs in fstab
3 *
4 */
5#include <sys/types.h>
6#include <sys/mman.h>
7#include <sys/stat.h>
8#include <unistd.h>
9#include <fcntl.h>
10#include <stdlib.h>
11#include <string.h>
12#include <signal.h>
13
14void eputs(const char *msg)
15{
16 write(2, msg, strlen(msg));
17}
18
19int main()
20{
21 char *name = "/etc/fstab";
22 char *backup_name = "/etc/fstab.bak";
b12a35e1 23 char *add = ",devgid=78,devmode=0664";
a904c8c2 24
25 char *old;
e665ab23 26 int fd;
db127c35 27 ssize_t i, old_sz;
a904c8c2 28 struct stat st;
29
30 eputs("Updating /etc/fstab...");
31 fd = open(name, O_RDONLY);
32 if (fd < 0) {
33 eputs("\nError: can't open file\n");
34 return 1;
35 }
36 fstat(fd, &st);
37 old = (char *) malloc(st.st_size);
abae7e08
ER
38 if (old == NULL) {
39 eputs("\nError: malloc failure\n");
40 return 1;
41 }
a904c8c2 42 read(fd, old, st.st_size);
43 close(fd);
44 old_sz = st.st_size;
45
46 fd = open(backup_name, O_WRONLY|O_CREAT|O_TRUNC, 0600);
47 if (fd < 0) {
48 eputs("\nError: can't make backup\n");
49 return 2;
50 }
51 write(fd, old, old_sz);
52 close(fd);
53
54 // find usbfs
55 for (i = 0; i < old_sz; i++) {
56 if ( old[i] == 'u' && old[i+1] == 's' && old[i+2] == 'b'
57 && old[i+3] == 'f' && old[i+4] == 's')
58 break;
59 }
60 // find defau(lts)
61 for (;i < old_sz; i++) {
62 if ( old[i] == 'd' && old[i+1] == 'e' && old[i+2] == 'f' && old[i+3] == 'a' && old[i+4] == 'u' )
63 break;
64 }
65 // find first space
66 for (;i < old_sz; i++) {
67 if ( old[i] == ' ' || old[i] == '\t' )
68 break;
69 }
70 if ( i >= old_sz ) {
71 eputs("\nError: can't find correct usbfs entry\n");
314a24f0 72 return 0;
a904c8c2 73 }
74
f6f6f2cd 75 fd = open(name, O_WRONLY|O_CREAT|O_TRUNC, 0644);
a904c8c2 76 if (fd < 0) {
77 eputs("\nError: can't open file for writing\n");
78 return 4;
79 }
80 write(fd, old, i);
81 write(fd, add, strlen(add));
82 write(fd, old + i, old_sz - i);
83 close(fd);
84 eputs("OK\n");
85
86 return 0;
87}
88
This page took 0.157428 seconds and 4 git commands to generate.