~ubuntu-security/ubuntu-cve-tracker/master

« back to all changes in this revision

Viewing changes to mir_reviews/watchdog/audits/code-c.txt

  • Committer: Steve Beattie
  • Date: 2019-02-19 06:18:27 UTC
  • Revision ID: sbeattie@ubuntu.com-20190219061827-oh57fzcfc1u9dlfk
The ubuntu-cve-tracker project has been converted to git.

Please use 'git clone https://git.launchpad.net/ubuntu-cve-tracker' to
get the converted tree.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
Running: /home/sarnold/bin/audit-code.sh -c C ./
2
 
Scanning './'
3
 
== subprocess_spawned() ==
4
 
./src/watchdog.c:58:static int sync_system(int sync_it)
5
 
./src/watchdog.c:98:                            execl(rbinary, rbinary, parm, NULL);
6
 
./src/watchdog.c:100:                           execl(rbinary, rbinary, parm, name, NULL);
7
 
./src/watchdog.c:104:                           execl(rbinary, rbinary, "repair", parm, NULL);
8
 
./src/watchdog.c:106:                           execl(rbinary, rbinary, "repair", parm, name, NULL);
9
 
./src/watchdog.c:407:           do_check(sync_system(sync_it), rbinary, NULL);
10
 
./src/mount.c:721:                                      execv(mountprog, mountargs);
11
 
./src/shutdown.c:310:                   ph = popen(exe, "w");
12
 
./src/test_binary.c:103:                        execl(tbinary, tbinary, NULL);
13
 
./src/test_binary.c:105:                        execl(tbinary, tbinary, "test", NULL);
14
 
 
15
 
== memory_management() ==
16
 
./src/watchdog.c:79:    sprintf(parm, "%d", result);
17
 
./src/watchdog.c:86:            strcpy(filename_buf, logdir);
18
 
./src/watchdog.c:90:            strcpy(filename_buf, logdir);
19
 
./src/watchdog.c:286:   filename_buf = (char *)xcalloc(strlen(logdir) + sizeof("/repair-bin.stdout") + 1, sizeof(char));
20
 
./src/mount.c:278:              *extra_opts = xmalloc(strlen(opts) + 1);
21
 
./src/mount.c:700:                      sprintf(mountprog, "/sbin/mount.%s", type);
22
 
./src/mount.c:942:      environ = (char **)xmalloc(sizeof(char *) * (i + 1));
23
 
./src/mount.c:952:              strcpy(argv0[0], PROC_NAME);
24
 
./src/mount.c:1051:                             mtmp = (struct mntentchn *)xmalloc(sizeof(*mtmp));
25
 
./src/mount.c:1057:                                             sprintf(major, "#%x", DISKMAJOR(statbuf.st_rdev));
26
 
./src/mount.c:1077:                             cp = (struct child *)xmalloc(sizeof *cp);
27
 
./src/xmalloc.c:21:void *xmalloc(size_t size)
28
 
./src/xmalloc.c:28:     t = malloc(size);
29
 
./src/xmalloc.c:35:void *xcalloc(size_t nmemb, size_t size)
30
 
./src/xmalloc.c:42:     t = calloc(nmemb, size);
31
 
./src/xmalloc.c:70:     t = xmalloc(n + 1);
32
 
./src/shutdown.c:185:                   if ((rootfs.mnt_opts = malloc(strlen(mnt->mnt_opts) + strlen("remount,ro") + 2)) == NULL) {
33
 
./src/shutdown.c:188:                           sprintf(rootfs.mnt_opts, "%s,remount,ro", mnt->mnt_opts);
34
 
./src/shutdown.c:229:           if ((p = (PROC *) calloc(1, sizeof(PROC))) == NULL) {
35
 
./src/shutdown.c:309:                   sprintf(exe, "%s -i %s", PATH_SENDMAIL, admin);
36
 
./src/shutdown.c:400:           strcpy(wtmp.ut_user, "shutdown");
37
 
./src/shutdown.c:401:           strcpy(wtmp.ut_line, "~");
38
 
./src/shutdown.c:402:           strcpy(wtmp.ut_id, "~~");
39
 
./src/sundries.c:21:    p = xmalloc(sizeof *p);
40
 
./src/sundries.c:35:    res = xmalloc(strlen(s) + strlen(t) + 1);
41
 
./src/sundries.c:36:    strcpy(res, s);
42
 
./src/sundries.c:51:    res = xmalloc(strlen(s) + strlen(t) + strlen(u) + 1);
43
 
./src/sundries.c:52:    strcpy(res, s);
44
 
./src/sundries.c:70:    res = xmalloc(strlen(s) + strlen(t) + strlen(u) + strlen(v) + 1);
45
 
./src/sundries.c:71:    strcpy(res, s);
46
 
./src/sundries.c:154:   sprintf(notype, "no%s", type);
47
 
./src/sundries.c:185:   canonical = xmalloc(PATH_MAX + 1);
48
 
./src/heartbeat.c:54:                   timestamps = (char *)xcalloc(hbstamps, TS_SIZE);
49
 
./src/heartbeat.c:58:                           memcpy(timestamps + (TS_SIZE * lastts), rbuf, TS_SIZE);
50
 
./src/heartbeat.c:66:                   sprintf(rbuf, "%*s\n", TS_SIZE - 1, "--restart--");
51
 
./src/heartbeat.c:67:                   memcpy(timestamps + (lastts * TS_SIZE), rbuf, TS_SIZE);
52
 
./src/heartbeat.c:97:           sprintf(tbufw, "%*s\n", TS_SIZE - 1, tbuf);
53
 
./src/heartbeat.c:99:           memcpy(timestamps + (lastts * TS_SIZE), tbufw, TS_SIZE);
54
 
./src/fstab.c:15:#include "sundries.h"          /* for xmalloc() etc */
55
 
./src/fstab.c:101:              mc->nxt = (struct mntentchn *)xmalloc(sizeof(*mc));
56
 
./src/lomount.c:101:            sprintf(dev, "/dev/loop%d", i);
57
 
./src/logmessage.c:6: * NOTE: We can't use malloc() here as one reason for a call could be the
58
 
./src/logmessage.c:115: vsprintf(buf, fmt, args);
59
 
./src/logmessage.c:139: vsprintf(buf, fmt, args);
60
 
./src/umount.c:114:             memcpy(&saddr.sin_addr, hostp->h_addr, hostp->h_length);
61
 
./src/configfile.c:110: new = (struct list *)xcalloc(1, sizeof(struct list));
62
 
./src/mntent.c:29:      ss = sp = xmalloc(4 * n + 1);
63
 
./src/mntent.c:76:      ret = sp = xmalloc(ss - s + 1);
64
 
./src/mntent.c:98:      mntFILE *mfp = xmalloc(sizeof(*mfp));
65
 
./src/nfsmount.c:163:           memcpy(&p, &pmap->pml_map, sizeof(p));
66
 
./src/nfsmount.c:234:   strcpy(hostdir, spec);
67
 
./src/nfsmount.c:263:                   memcpy(&server_addr.sin_addr, hp->h_addr, hp->h_length);
68
 
./src/nfsmount.c:267:   memcpy(&mount_server_addr, &server_addr, sizeof(mount_server_addr));
69
 
./src/nfsmount.c:279:   sprintf(new_opts, "%s%saddr=%s", old_opts, *old_opts ? "," : "", s);
70
 
./src/nfsmount.c:504:                           memcpy(&mount_server_addr.sin_addr, hp->h_addr, hp->h_length);
71
 
./src/nfsmount.c:638:           memcpy(data.root.data, (char *)status.nfsv2.fhstatus_u.fhs_fhandle, NFS_FHSIZE);
72
 
./src/nfsmount.c:641:           memcpy(data.old_root.data, (char *)status.nfsv2.fhstatus_u.fhs_fhandle, NFS_FHSIZE);
73
 
./src/nfsmount.c:656:           memcpy(data.root.data, (char *)fhandle->fhandle3_val, fhandle->fhandle3_len);
74
 
./src/nfsmount.c:707:   memcpy((char *)&data.addr, (char *)&server_addr, sizeof(data.addr));
75
 
./src/nfsmount.c:791:   sprintf(buf, "unknown nfs status return value: %d", stat);
76
 
./src/test_binary.c:27: struct process *node = (struct process *)xmalloc(sizeof(struct process));
77
 
./src/test_binary.c:92:         strcpy(filename_buf, logdir);
78
 
./src/test_binary.c:96:         strcpy(filename_buf, logdir);
79
 
./src/net.c:196:                        net->packet = (unsigned char *)xcalloc((unsigned int)(DATALEN + MAXIPLEN + MAXICMPLEN), sizeof(char));
80
 
./include/sundries.h:60:#include "xmalloc.h"    /* Has xmalloc(), xstrdup() & xstrndup() */
81
 
./include/xmalloc.h:4:void *xmalloc (size_t size);
82
 
./include/xmalloc.h:5:void *xcalloc (size_t nmemb, size_t size);
83
 
 
84
 
== files() ==
85
 
./src/wd_identify.c:71: watchdog = open(devname, O_WRONLY);
86
 
./src/watchdog.c:88:            if (!freopen(filename_buf, "a+", stdout))
87
 
./src/watchdog.c:92:            if (!freopen(filename_buf, "a+", stderr))
88
 
./src/memory.c:44:              mem_fd = open(mem_name, O_RDONLY);
89
 
./src/iface.c:16:       FILE *file = fopen("/proc/net/dev", "r");
90
 
./src/mount.c:388:      fd = open(device, O_RDONLY);
91
 
./src/mount.c:450:static int procopen(void)
92
 
./src/mount.c:452:      return ((procfs = fopen(PROC_FILESYSTEMS, "r")) != NULL);
93
 
./src/mount.c:474:      if (procopen()) {
94
 
./src/mount.c:566:      if (!procopen())
95
 
./src/mount.c:838:                                          && (fd = open(spec, O_RDONLY)) >= 0) {
96
 
./src/mount.c:1176:     while ((fd = open("/dev/null", O_RDWR)) == 0 || fd == 1 || fd == 2) ;
97
 
./src/lock_mem.c:74:                            fp = fopen(buf, "w");
98
 
./src/lock_mem.c:88:                            fp = fopen(buf, "w");
99
 
./src/shutdown.c:310:                   ph = popen(exe, "w");
100
 
./src/shutdown.c:394:   if ((fd = open(_PATH_WTMP, O_WRONLY | O_APPEND)) >= 0) {
101
 
./src/shutdown.c:416:           if ((fd_seed = open("/dev/urandom", O_RDONLY)) >= 0) {
102
 
./src/file_table.c:17:  fd = open("/proc/uptime", O_RDONLY);
103
 
./src/heartbeat.c:44:           hb = ((hb = fopen(heartbeat, "r+")) == NULL) ? fopen(heartbeat, "w+") : hb;
104
 
./src/fstab.c:63:               int fd = open(MOUNTED, O_RDWR | O_CREAT, 0644);
105
 
./src/fstab.c:275:              lock = open(MOUNTED_LOCK, O_WRONLY | O_CREAT, 0);
106
 
./src/lomount.c:73:     if ((fd = open(device, O_RDONLY)) < 0) {
107
 
./src/lomount.c:104:                    fd = open(dev, O_RDONLY);
108
 
./src/lomount.c:121:    if ((procdev = fopen(PROC_DEVICES, "r")) != NULL) {
109
 
./src/lomount.c:159:    if ((ffd = open(file, mode)) < 0) {
110
 
./src/lomount.c:161:                    ffd = open(file, mode = O_RDONLY);
111
 
./src/lomount.c:167:    if ((fd = open(device, mode)) < 0) {
112
 
./src/lomount.c:231:    if ((fd = open(device, O_RDONLY)) < 0) {
113
 
./src/keep_alive.c:44:          watchdog_fd = open(name, O_WRONLY);
114
 
./src/temp.c:92:        fp = fopen(name, "r");
115
 
./src/daemon-pid.c:38:  FILE *fp = fopen(fname, "r");
116
 
./src/daemon-pid.c:80:  fp = fopen(fname, "w");
117
 
./src/configfile.c:149: if ((wc = fopen(configfile, "r")) == NULL) {
118
 
./src/mntent.c:100:     mfp->mntent_fp = fopen(file, mode);
119
 
./src/load.c:36:                load_fd = open(load_name, O_RDONLY);
120
 
./src/pidfile.c:17:     int fd = open(file->name, O_RDONLY), pid;
121
 
./src/test_binary.c:94:         if (!freopen(filename_buf, "a+", stdout))
122
 
./src/test_binary.c:98:         if (!freopen(filename_buf, "a+", stderr))
123
 
 
124
 
== logging() ==
125
 
./src/wd_identify.c:73:         log_message(LOG_ERR, "cannot open %s (errno = %d = '%s')", devname, errno, strerror(errno));
126
 
./src/wd_identify.c:79:         log_message(LOG_ERR, "cannot get watchdog identity (errno = %d = '%s')", errno, strerror(errno));
127
 
./src/wd_identify.c:86:         log_message(LOG_ERR, "write watchdog device gave error %d = '%s'!", errno, strerror(errno));
128
 
./src/wd_identify.c:89:         log_message(LOG_ALERT, "cannot close watchdog (errno = %d = '%s')", errno, strerror(errno));
129
 
./src/watchdog.c:116:                   log_message(LOG_ERR, "process table is full!");
130
 
./src/watchdog.c:137:           log_message(LOG_ERR, "repair child %d timed out", child_pid);
131
 
./src/watchdog.c:141:           log_message(LOG_ERR, "child %d does not exist (errno = %d = '%s')", child_pid, err, strerror(err));
132
 
./src/watchdog.c:149:           log_message(LOG_ERR, "repair binary %s returned %d", rbinary, ret);
133
 
./src/watchdog.c:263:           fatal_error(EX_USAGE, "Error:\n"
134
 
./src/watchdog.c:269:           fatal_error(EX_USAGE, "Error:\n"
135
 
./src/watchdog.c:276:           fatal_error(EX_SYSERR, "Cannot create directory %s (%s)", logdir, strerror(errno));
136
 
./src/watchdog.c:293:                   perror(progname);
137
 
./src/watchdog.c:299:                   perror(progname);
138
 
./src/watchdog.c:305:                           perror(progname);
139
 
./src/watchdog.c:313:                   perror(progname);
140
 
./src/watchdog.c:335:           fatal_error(EX_USAGE, "unable to gain lock via PID file");
141
 
./src/watchdog.c:339:   log_message(LOG_INFO, "starting daemon (%d.%d):", MAJOR_VERSION, MINOR_VERSION);
142
 
./src/watchdog.c:340:   log_message(LOG_INFO, "int=%ds realtime=%s sync=%s soft=%s mla=%d mem=%d",
143
 
./src/watchdog.c:344:           log_message(LOG_INFO, "ping: no machine to check");
144
 
./src/watchdog.c:347:                   log_message(LOG_INFO, "ping: %s", act->name);
145
 
./src/watchdog.c:350:           log_message(LOG_INFO, "file: no file to check");
146
 
./src/watchdog.c:353:                   log_message(LOG_INFO, "file: %s:%d", act->name, act->parameter.file.mtime);
147
 
./src/watchdog.c:356:           log_message(LOG_INFO, "pidfile: no server process to check");
148
 
./src/watchdog.c:359:                   log_message(LOG_INFO, "pidfile: %s", act->name);
149
 
./src/watchdog.c:362:           log_message(LOG_INFO, "interface: no interface to check");
150
 
./src/watchdog.c:365:                   log_message(LOG_INFO, "interface: %s", act->name);
151
 
./src/watchdog.c:368:           log_message(LOG_INFO, "temperature: no sensors to check");
152
 
./src/watchdog.c:370:           log_message(LOG_INFO, "temperature: maximum = %d", maxtemp);
153
 
./src/watchdog.c:372:                   log_message(LOG_INFO, "temperature: %s", act->name);
154
 
./src/watchdog.c:375:   log_message(LOG_INFO, "test=%s(%ld) repair=%s(%ld) alive=%s heartbeat=%s to=%s no_act=%s force=%s",
155
 
./src/watchdog.c:461:                   log_message(LOG_INFO, "still alive after %ld interval(s)", count);
156
 
./src/memory.c:47:                      log_message(LOG_ERR, "cannot open %s (errno = %d = '%s')", mem_name, err, strerror(err));
157
 
./src/memory.c:72:              log_message(LOG_ERR, "lseek %s gave errno = %d = '%s'", mem_name, err, strerror(err));
158
 
./src/memory.c:83:              log_message(LOG_ERR, "read %s gave errno = %d = '%s'", mem_name, err, strerror(err));
159
 
./src/memory.c:95:              log_message(LOG_ERR, "%s contains invalid data (read = %s)", mem_name, buf);
160
 
./src/memory.c:107:             log_message(LOG_INFO, "currently there are %d kB of free memory available", free);
161
 
./src/memory.c:110:             log_message(LOG_ERR, "memory %d kB is less than %d pages", free, minpages);
162
 
./src/memory.c:126:             log_message(LOG_ALERT, "cannot close %s (errno = %d)", mem_name, errno);
163
 
./src/memory.c:149:             log_message(LOG_ALERT, "cannot allocate %lu bytes (errno = %d = '%s')",
164
 
./src/memory.c:150:                         (unsigned long)len, i, strerror(i));
165
 
./src/iface.c:20:               log_message(LOG_ERR, "cannot open /proc/net/dev (errno = %d = '%s')", err, strerror(err));
166
 
./src/iface.c:33:                       if (!ferror(file))
167
 
./src/iface.c:37:                               log_message(LOG_ERR, "cannot read /proc/net/dev (errno = %d = '%s')", err, strerror(err));
168
 
./src/iface.c:54:                                       log_message(LOG_INFO, "device %s received %lu bytes", dev->name, bytes);
169
 
./src/iface.c:58:                                       log_message(LOG_ERR, "device %s did not receive anything since last check", dev->name);
170
 
./src/iface.c:69:               log_message(LOG_ERR, "cannot close /proc/net/dev (errno = %d = '%s')", err, strerror(err));
171
 
./src/mount.c:436:      perror(device);
172
 
./src/mount.c:488:              error("mount: according to mtab, %s is already mounted on %s", mc->mnt_fsname, node);
173
 
./src/mount.c:490:              error("mount: according to mtab, %s is mounted on %s", spec, mc->mnt_dir);
174
 
./src/mount.c:509:              die(EX_FILEIO, "mount: can't open %s for writing: %s", MOUNTED, strerror(errno));
175
 
./src/mount.c:521:                      die(EX_FILEIO, "mount: error writing %s: %s", MOUNTED, strerror(errno));
176
 
./src/mount.c:525:                      die(EX_FILEIO, "mount: error changing mode of %s: %s", MOUNTED, strerror(errno));
177
 
./src/mount.c:641:                      error("mount: loop device specified twice");
178
 
./src/mount.c:646:                      error("mount: type specified twice");
179
 
./src/mount.c:728:                                      error("cannot fork: %s", strerror(errno));
180
 
./src/mount.c:762:                                      error("mount: can't open %s: %s", MOUNTED, strerror(errno));
181
 
./src/mount.c:765:                                              error("mount: error writing %s: %s", MOUNTED, strerror(errno));
182
 
./src/mount.c:786:              error("mount: you must specify the filesystem type");
183
 
./src/mount.c:792:                                      error("mount: mount point %s is not a directory", node);
184
 
./src/mount.c:794:                                      error("mount: permission denied");
185
 
./src/mount.c:796:                              error("mount: must be superuser to use mount");
186
 
./src/mount.c:800:                              error("mount: %s is busy", node);
187
 
./src/mount.c:804:                                      error("mount: %s is busy", node);       /* no */
188
 
./src/mount.c:806:                                      error("mount: proc already mounted");
189
 
./src/mount.c:808:                              error("mount: %s already mounted or %s busy", spec, node);
190
 
./src/mount.c:814:                              error("mount: mount point %s does not exist", node);
191
 
./src/mount.c:816:                              error("mount: mount point %s is a symbolic link to nowhere", node);
192
 
./src/mount.c:818:                              error("mount: special device %s does not exist", spec);
193
 
./src/mount.c:821:                              perror("mount");
194
 
./src/mount.c:825:                      error("mount: mount point %s is not a directory", node);
195
 
./src/mount.c:832:                                      error("mount: %s not mounted already, or bad option", node);
196
 
./src/mount.c:834:                                      error("mount: wrong fs type, bad option, bad superblock on %s,\n"
197
 
./src/mount.c:849:                      error("mount table full");
198
 
./src/mount.c:852:                      error("mount: %s: can't read superblock", spec);
199
 
./src/mount.c:856:                              error("mount: %s has wrong major or minor number", spec);
200
 
./src/mount.c:861:                              error("mount: fs type %s not supported by kernel", type);
201
 
./src/mount.c:873:                                      error("mount: probably you meant %s", lowtype);
202
 
./src/mount.c:875:                                      error("mount: maybe you meant iso9660 ?");
203
 
./src/mount.c:878:                              error("mount: %s has wrong device number or fs type %s not supported", spec, type);
204
 
./src/mount.c:882:                              error("mount: %s is not a block device, and stat fails?", spec);
205
 
./src/mount.c:884:                              error("mount: the kernel does not recognize %s as a block device\n"
206
 
./src/mount.c:887:                              error("mount: %s is not a block device (maybe try `-o loop'?)", spec);
207
 
./src/mount.c:889:                              error("mount: %s is not a block device", spec);
208
 
./src/mount.c:892:                      error("mount: %s is not a valid block device", spec);
209
 
./src/mount.c:897:                              error("mount: block device %s is not permitted on its filesystem", spec);
210
 
./src/mount.c:912:                              error("mount: %s%s is write-protected, mounting read-only",
211
 
./src/mount.c:918:                      error("mount: %s", strerror(mnt_err));
212
 
./src/mount.c:1095:                             error("mount: cannot fork: %s", strerror(errno));
213
 
./src/mount.c:1121:                             perror("waitpid");
214
 
./src/mount.c:1263:                     error("not mounted anything");
215
 
./src/lock_mem.c:54:                    log_message(LOG_ERR, "cannot lock realtime memory (errno = %d = '%s')", errno, strerror(errno));
216
 
./src/lock_mem.c:61:                            log_message(LOG_ERR, "cannot set scheduler (errno = %d = '%s')", errno, strerror(errno));
217
 
./src/lock_mem.c:99:                    log_message(LOG_WARNING, "unable to disable oom handling!");
218
 
./src/lock_mem.c:115:                   log_message(LOG_ERR, "cannot unlock realtime memory (errno = %d = '%s')", errno, strerror(errno));
219
 
./src/file_stat.c:19:           log_message(LOG_ERR, "cannot stat %s (errno = %d = '%s')", file->name, err, strerror(err));
220
 
./src/file_stat.c:31:                   log_message(LOG_INFO, "file %s was last changed at %s", file->name, text);
221
 
./src/file_stat.c:36:                   log_message(LOG_ERR, "file %s was not changed in %d seconds.", file->name, file->parameter.file.mtime);
222
 
./src/xmalloc.c:30:             fatal_error(EX_SYSERR, "xmalloc failed for %lu bytes", (unsigned long)size);
223
 
./src/xmalloc.c:44:             fatal_error(EX_SYSERR, "xcalloc failed for %lu x %lu bytes", (unsigned long)nmemb, (unsigned long)size);
224
 
./src/xmalloc.c:58:             fatal_error(EX_SYSERR, "xstrdup failed for %lu byte string", (unsigned long)strlen(s));
225
 
./src/xmalloc.c:68:             fatal_error(EX_SOFTWARE, "bad xstrndup call (%sn = %d)", s == NULL ? "" : "s = NULL, ", n);
226
 
./src/shutdown.c:88:    log_message(LOG_INFO, "stopping daemon (%d.%d)", MAJOR_VERSION, MINOR_VERSION);
227
 
./src/shutdown.c:131:   log_message(LOG_ALERT, "WATCHDOG PANIC: failed to reboot, trying hard-reset");
228
 
./src/shutdown.c:135:   log_message(LOG_ALERT, "WATCHDOG PANIC: still alive after sleeping %d seconds", 4 * dev_timeout);
229
 
./src/shutdown.c:152:                           perror(mnt->mnt_fsname);
230
 
./src/shutdown.c:161:                           perror(mnt->mnt_fsname);
231
 
./src/shutdown.c:166:                           perror(mnt->mnt_fsname);
232
 
./src/shutdown.c:182:                           log_message(LOG_ERR, "out of memory");
233
 
./src/shutdown.c:186:                           log_message(LOG_ERR, "out of memory");
234
 
./src/shutdown.c:210:           log_message(LOG_ERR, "cannot opendir /proc");
235
 
./src/shutdown.c:230:                   log_message(LOG_ERR, "out of memory");
236
 
./src/shutdown.c:307:                   log_message(LOG_ERR, "%s does not exist or is not executable (errno = %d)", PATH_SENDMAIL, errno);
237
 
./src/shutdown.c:312:                           log_message(LOG_ERR, "cannot start %s (errno = %d)", PATH_SENDMAIL, errno);
238
 
./src/shutdown.c:321:                           if (ferror(ph) != 0) {
239
 
./src/shutdown.c:322:                                   log_message(LOG_ERR, "cannot send mail (errno = %d)", errno);
240
 
./src/shutdown.c:329:                                   if (ferror(ph) != 0) {
241
 
./src/shutdown.c:330:                                           log_message(LOG_ERR, "cannot send mail (errno = %d)", errno);
242
 
./src/shutdown.c:338:                                           if (ferror(ph) != 0) {
243
 
./src/shutdown.c:339:                                                   log_message(LOG_ERR, "cannot send mail (errno = %d)", errno);
244
 
./src/shutdown.c:344:                                   log_message(LOG_ERR, "cannot finish mail (errno = %d)", errno);
245
 
./src/shutdown.c:352:   log_message(LOG_ALERT, "shutting down the system because of error %d", errorcode);
246
 
./src/shutdown.c:407:                   log_message(LOG_ERR, "failed writing wtmp (%s)", strerror(errno));
247
 
./src/shutdown.c:424:                                           log_message(LOG_ERR, "failed writing urandom (%s)", strerror(errno));
248
 
./src/shutdown.c:434:           log_message(LOG_ERR, "failed stopping acct() (%s)", strerror(errno));
249
 
./src/file_table.c:23:                  log_message(LOG_ERR, "file table overflow detected!");
250
 
./src/file_table.c:27:                  log_message(LOG_ERR, "cannot open /proc/uptime (errno = %d = '%s')", err, strerror(err));
251
 
./src/file_table.c:35:                  log_message(LOG_ERR, "close /proc/uptime gave errno = %d = '%s'", err, strerror(err));
252
 
./src/sundries.c:92:void error(const char *fmt, ...)
253
 
./src/heartbeat.c:46:                   log_message(LOG_ERR, "cannot open %s (errno = %d = '%s')", heartbeat, errno, strerror(errno));
254
 
./src/heartbeat.c:110:                          log_message(LOG_ERR, "write heartbeat file gave error %d = '%s'!", err, strerror(err));
255
 
./src/heartbeat.c:115:                          log_message(LOG_ERR, "write heartbeat file gave error %d = '%s'!", err, strerror(err));
256
 
./src/heartbeat.c:121:                          log_message(LOG_ERR, "write heartbeat file gave error %d = '%s'!", err, strerror(err));
257
 
./src/heartbeat.c:135:          log_message(LOG_ALERT, "cannot close %s (errno = %d)", heartbeat, errno);
258
 
./src/fstab.c:111:      if (ferror(mfp->mntent_fp)) {
259
 
./src/fstab.c:112:              error("warning: error reading %s: %s", fnam, strerror(errno));
260
 
./src/fstab.c:142:                      error("warning: can't open %s: %s", MOUNTED, strerror(errsv));
261
 
./src/fstab.c:163:              error("warning: can't open %s: %s", _PATH_FSTAB, strerror(errno));
262
 
./src/fstab.c:278:                          "(use -n flag to override)", MOUNTED_LOCK, strerror(errno));
263
 
./src/fstab.c:293:                          MOUNTED_LOCK, errnosv == EINTR ? "timed out" : strerror(errno));
264
 
./src/fstab.c:335:              error("cannot open %s (%s) - mtab not updated", MOUNTED, strerror(errno));
265
 
./src/fstab.c:341:              error("can't open %s (%s) - mtab not updated", MOUNTED_TEMP, strerror(errno));
266
 
./src/fstab.c:363:                      die(EX_FILEIO, "error writing %s: %s", MOUNTED_TEMP, strerror(errno));
267
 
./src/fstab.c:366:              die(EX_FILEIO, "error writing %s: %s", MOUNTED_TEMP, strerror(errno));
268
 
./src/fstab.c:370:              fprintf(stderr, "error changing mode of %s: %s\n", MOUNTED_TEMP, strerror(errno));
269
 
./src/fstab.c:374:              fprintf(stderr, "can't rename %s to %s: %s\n", MOUNTED_TEMP, MOUNTED, strerror(errno));
270
 
./src/lomount.c:31:void error(const char *fmt, ...);    /* idem */
271
 
./src/lomount.c:74:             fprintf(stderr, "loop: can't open device %s: %s\n", device, strerror(errno));
272
 
./src/lomount.c:78:             fprintf(stderr, "loop: can't get info on device %s: %s\n", device, strerror(errno));
273
 
./src/lomount.c:134:            error("mount: could not find any device /dev/loop#");
274
 
./src/lomount.c:137:                    error("mount: Could not find any loop device.\n"
275
 
./src/lomount.c:140:                    error("mount: Could not find any loop device, and, according to %s,\n"
276
 
./src/lomount.c:144:                    error("mount: Could not find any loop device. Maybe this kernel does not know\n"
277
 
./src/lomount.c:148:            error("mount: could not find any free loop device");
278
 
./src/lomount.c:163:                    perror(file);
279
 
./src/lomount.c:168:            perror(device);
280
 
./src/lomount.c:212:            perror("ioctl: LOOP_SET_FD");
281
 
./src/lomount.c:217:            perror("ioctl: LOOP_SET_STATUS");
282
 
./src/lomount.c:232:            fprintf(stderr, "loop: can't delete device %s: %s\n", device, strerror(errno));
283
 
./src/lomount.c:236:            perror("ioctl: LOOP_CLR_FD");
284
 
./src/keep_alive.c:46:                  log_message(LOG_ERR, "cannot open %s (errno = %d = '%s')", name, errno, strerror(errno));
285
 
./src/keep_alive.c:55:                          log_message(LOG_ERR, "cannot get watchdog identity (errno = %d = '%s')", errno, strerror(errno));
286
 
./src/keep_alive.c:58:                          log_message(LOG_INFO, "hardware watchdog identity: %s", ident.identity);
287
 
./src/keep_alive.c:81:                          log_message(LOG_ERR, "cannot set timeout %d (errno = %d = '%s')", timeout, errno, strerror(errno));
288
 
./src/keep_alive.c:83:                          log_message(LOG_INFO, "watchdog now set to %d seconds", timeout);
289
 
./src/keep_alive.c:90:                          log_message(LOG_ERR, "cannot get timeout (errno = %d = '%s')", errno, strerror(errno));
290
 
./src/keep_alive.c:92:                          log_message(LOG_INFO, "watchdog was set to %d seconds", timeout);
291
 
./src/keep_alive.c:109:         log_message(LOG_ERR, "write watchdog device gave error %d = '%s'!", err, strerror(err));
292
 
./src/keep_alive.c:145:                 log_message(LOG_ERR, "write watchdog device gave error %d = '%s'!", err, strerror(err));
293
 
./src/keep_alive.c:151:                 log_message(LOG_ALERT, "cannot close watchdog (errno = %d = '%s')", err, strerror(err));
294
 
./src/temp.c:95:                log_message(LOG_ERR, "failed to open %s (%s)", name, strerror(err));
295
 
./src/temp.c:105:               log_message(LOG_ERR, "failed to read %s (%s)", name, strerror(err));
296
 
./src/temp.c:113:               log_message(LOG_INFO, "current temperature is %.3f for %s", temp, name);
297
 
./src/temp.c:144:                       log_message(LOG_WARNING, "temperature increases above %d (%s)", templevel3, act->name);
298
 
./src/temp.c:149:                       log_message(LOG_WARNING, "temperature increases above %d (%s)", templevel2, act->name);
299
 
./src/temp.c:155:                       log_message(LOG_WARNING, "temperature increases above %d (%s)", templevel1, act->name);
300
 
./src/temp.c:162:                       log_message(LOG_INFO, "temperature now OK again for %s", act->name);
301
 
./src/temp.c:168:               log_message(LOG_ERR, "it is too hot inside (temperature = %d >= %d for %s)", temperature, maxtemp, act->name);
302
 
./src/daemon-pid.c:51:                          log_message(LOG_WARNING, "PID file %s already used by PID=%d", fname, pid);
303
 
./src/daemon-pid.c:65: * Return value is zero if OK, or -1 for error (null name, PID file in use, or can't write).
304
 
./src/daemon-pid.c:87:          log_message(LOG_ERR, "cannot open PID file %s (%s)", fname, strerror(errno));
305
 
./src/daemon-pid.c:105:                 log_message(LOG_ERR, "cannot remove PID file %s (%s)", saved_fname, strerror(errno));
306
 
./src/logmessage.c:4: * Also has fatal_error() function to the same then exit.
307
 
./src/logmessage.c:23:static int output_message(int level, char *buf);
308
 
./src/logmessage.c:36: * or to syslog (assuming it is compiled as such, otherwise terminal as well).
309
 
./src/logmessage.c:64: * log_message() and fatal_error() calls. When using syslog we can output
310
 
./src/logmessage.c:68:static int output_message(int level, char *buf)
311
 
./src/logmessage.c:75:          syslog(level, "%s", buf);
312
 
./src/logmessage.c:88:          syslog(level, "failed writing message terminal (rv=%d, errno='%s')", rv, strerror(errno));
313
 
./src/logmessage.c:100: * the string '%s' and give it strerror(errno) as an argument.
314
 
./src/logmessage.c:103:int log_message(int level, const char *fmt, ...)
315
 
./src/logmessage.c:119: rv = output_message(level, buf);
316
 
./src/logmessage.c:128:void fatal_error(int exitcode, const char *fmt, ...)
317
 
./src/logmessage.c:143: output_message(LOG_ERR, buf);
318
 
./src/umount.c:122:             clnt_pcreateerror("Cannot MOUNTPROG RPC");
319
 
./src/umount.c:132:             clnt_perror(clp, "Bad UMNT RPC");
320
 
./src/umount.c:147:             error("umount: %s: invalid block device", dev);
321
 
./src/umount.c:150:             error("umount: %s: not mounted", dev);
322
 
./src/umount.c:153:             error("umount: %s: can't write superblock", dev);
323
 
./src/umount.c:158:             error("umount: %s: device is busy", dev);
324
 
./src/umount.c:161:             error("umount: %s: not found", dev);
325
 
./src/umount.c:164:             error("umount: %s: must be superuser to umount", dev);
326
 
./src/umount.c:167:             error("umount: %s: block devices not permitted on fs", dev);
327
 
./src/umount.c:170:             error("umount: %s: %s", dev, strerror(err));
328
 
./src/umount.c:232:                     perror("remount");
329
 
./src/configfile.c:150:         fatal_error(EX_SYSERR, "Can't open config file \"%s\" (%s)", configfile, strerror(errno));
330
 
./src/configfile.c:156:                 if (!ferror(wc))
331
 
./src/configfile.c:159:                         fatal_error(EX_SYSERR, "Error reading config file (%s)", strerror(errno));
332
 
./src/configfile.c:308:         fatal_error(EX_SYSERR, "Error closing file (%s)", strerror(errno));
333
 
./src/configfile.c:314:         fatal_error(EX_SYSERR, "Parameters %s = %d in file \"%s\" must be > 0", INTERVAL, tint, configfile);
334
 
./src/configfile.c:357:                 log_message(LOG_WARNING, "skipping hidden file %s", fname);
335
 
./src/configfile.c:366:         log_message(LOG_DEBUG, "adding %s to list of auto-repair binaries", fname);
336
 
./src/wd_keepalive.c:55:        log_message(LOG_INFO, "stopping watchdog keepalive daemon (%d.%d)", MAJOR_VERSION, MINOR_VERSION);
337
 
./src/wd_keepalive.c:141:               perror(progname);
338
 
./src/wd_keepalive.c:147:               perror(progname);
339
 
./src/wd_keepalive.c:153:                       perror(progname);
340
 
./src/wd_keepalive.c:161:               perror(progname);
341
 
./src/wd_keepalive.c:182:               fatal_error(EX_USAGE, "unable to gain lock via PID file");
342
 
./src/wd_keepalive.c:187:       log_message(LOG_INFO, "starting watchdog keepalive daemon (%d.%d):", MAJOR_VERSION, MINOR_VERSION);
343
 
./src/wd_keepalive.c:189:               log_message(LOG_INFO, " no watchdog device configured, aborting");
344
 
./src/wd_keepalive.c:191:               log_message(LOG_INFO, " int=%d alive=%s realtime=%s", tint, devname, realtime ? "yes" : "no");
345
 
./src/load.c:38:                        log_message(LOG_ERR, "cannot open %s (errno = %d = '%s')", load_name, errno, strerror(errno));
346
 
./src/load.c:61:                log_message(LOG_ERR, "lseek %s gave errno = %d = '%s'", load_name, err, strerror(err));
347
 
./src/load.c:72:                log_message(LOG_ERR, "read %s gave errno = %d = '%s'", load_name, err, strerror(err));
348
 
./src/load.c:92:                log_message(LOG_ERR, "%s does not contain any data (read = %s)", load_name, buf);
349
 
./src/load.c:101:               log_message(LOG_INFO, "current load is %d %d %d", avg1, avg5, avg15);
350
 
./src/load.c:105:               log_message(LOG_ERR, "loadavg %d %d %d is higher than the given threshold %d %d %d!",
351
 
./src/load.c:122:               log_message(LOG_ALERT, "cannot close %s (errno = %d)", load_name, errno);
352
 
./src/pidfile.c:22:             log_message(LOG_ERR, "cannot open %s (errno = %d = '%s')", file->name, err, strerror(err));
353
 
./src/pidfile.c:35:             log_message(LOG_ERR, "lseek %s gave errno = %d = '%s'", file->name, err, strerror(err));
354
 
./src/pidfile.c:50:             log_message(LOG_ERR, "read %s gave errno = %d = '%s'", file->name, err, strerror(err));
355
 
./src/pidfile.c:64:             log_message(LOG_ERR, "could not close %s, errno = %d = '%s'", file->name, err, strerror(err));
356
 
./src/pidfile.c:74:             log_message(LOG_ERR, "pinging process %d (%s) gave errno = %d = '%s'", pid, file->name, err, strerror(err));
357
 
./src/pidfile.c:84:             log_message(LOG_INFO, "was able to ping process %d (%s).", pid, file->name);
358
 
./src/nfsmount.c:73:static char *nfs_strerror(int stat);
359
 
./src/nfsmount.c:600:                                   clnt_perror(mclient, "mount");
360
 
./src/nfsmount.c:605:                                   clnt_perror(mclient, "mount");
361
 
./src/nfsmount.c:612:                                   clnt_pcreateerror("mount");
362
 
./src/nfsmount.c:635:                           hostname, dirname, nfs_strerror(status.nfsv2.fhs_status));
363
 
./src/nfsmount.c:649:                           hostname, dirname, nfs_strerror(status.nfsv3.fhs_status));
364
 
./src/nfsmount.c:673:           perror("nfs socket");
365
 
./src/nfsmount.c:677:           perror("nfs bindresvport");
366
 
./src/nfsmount.c:700:           perror("nfs connect");
367
 
./src/nfsmount.c:782:static char *nfs_strerror(int stat)
368
 
./src/nfsmount.c:789:                   return strerror(nfs_errtbl[i].errnum);
369
 
./src/test_binary.c:83:         log_message(LOG_ERR, "test-binary %s exceeded time limit %ld", tbinary, timeout);
370
 
./src/test_binary.c:115:                        log_message(LOG_ERR, "process table is full!");
371
 
./src/test_binary.c:146:                                log_message(LOG_ERR, "test binary %s returned %d", tbinary, WEXITSTATUS(result));
372
 
./src/test_binary.c:150:                                log_message(LOG_ERR, "test binary %s was killed by uncaught signal %d", tbinary, WTERMSIG(result));
373
 
./src/test_binary.c:158:                                log_message(LOG_ERR, "child %d did not exit immediately (error = %d = '%s')", child_pid, err, strerror(err));
374
 
./src/ifdown.c:39:              perror("socket");
375
 
./src/ifdown.c:47:              perror("SIOCGIFCONF");
376
 
./src/ifdown.c:61:                      perror(ifr[i].ifr_name);
377
 
./src/net.c:89:                         log_message(LOG_ERR, "network is unreachable (target: %s)", target);
378
 
./src/net.c:94:                         log_message(LOG_ERR, "sendto gave errno = %d = '%s'", err, strerror(err));
379
 
./src/net.c:128:                                        log_message(LOG_ERR, "ping select timeout = %2ld.%06ld seconds",
380
 
./src/net.c:143:                                                        log_message(LOG_ERR, "recvfrom gave errno = %d = '%s'", err, strerror(err));
381
 
./src/net.c:159:                                                                log_message(LOG_INFO, "got answer from target %s", target);
382
 
./src/net.c:169:        log_message(LOG_ERR, "no response from ping (target: %s)", target);
383
 
./src/net.c:194:                             fatal_error(EX_USAGE, "unknown host %s", act->name);
384
 
./src/net.c:198:                                fatal_error(EX_SYSERR, "unknown protocol icmp.");
385
 
./src/net.c:202:                            fatal_error(EX_SYSERR, "error opening socket (%s)", strerror(errno));
386
 
./include/sundries.h:37:void error(const char *fmt, ...);
387
 
./include/logmessage.h:12: * We need the LOG_? values used for log_message() so either include <syslog.h>
388
 
./include/logmessage.h:30: * Define exit status for fatal_error() calls (from sundries.h originally).
389
 
./include/logmessage.h:65:int  log_message(int level,           const char *fmt, ...) PRINTF_STYLE(2, 3);
390
 
./include/logmessage.h:66:void fatal_error(int exitcode,        const char *fmt, ...) PRINTF_STYLE(2, 3);
391
 
 
392
 
== environment() ==
393
 
 
394
 
== privileged() ==
395
 
./src/mount.c:706:                                      setuid(getuid());
396
 
./src/mount.c:707:                                      setgid(getgid());
397
 
./src/wd_identify.c:78: if (ioctl(watchdog, WDIOC_GETSUPPORT, &ident) < 0) {
398
 
./src/mount.c:523:      if (fchmod(fileno(mfp->mntent_fp), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) < 0)
399
 
./src/mount.c:839:                                              if (ioctl(fd, BLKGETSIZE, &size) == 0 && size <= 2)
400
 
./src/fstab.c:369:      if (fchmod(fileno(mftmp->mntent_fp), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) < 0)
401
 
./src/lomount.c:77:     if (ioctl(fd, LOOP_GET_STATUS, &loopinfo) < 0) {
402
 
./src/lomount.c:106:                            if (ioctl(fd, LOOP_GET_STATUS, &loopinfo) == 0)
403
 
./src/lomount.c:211:    if (ioctl(fd, LOOP_SET_FD, ffd) < 0) {
404
 
./src/lomount.c:215:    if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) {
405
 
./src/lomount.c:216:            (void)ioctl(fd, LOOP_CLR_FD, 0);
406
 
./src/lomount.c:235:    if (ioctl(fd, LOOP_CLR_FD, 0) < 0) {
407
 
./src/keep_alive.c:22:#include <stropts.h>                      /* for ioctl() */
408
 
./src/keep_alive.c:54:                  if (ioctl(watchdog_fd, WDIOC_GETSUPPORT, &ident) < 0) {
409
 
./src/keep_alive.c:80:                  if (ioctl(watchdog_fd, WDIOC_SETTIMEOUT, &timeout) < 0) {
410
 
./src/keep_alive.c:89:                  if (ioctl(watchdog_fd, WDIOC_GETTIMEOUT, &timeout) < 0) {
411
 
./src/ifdown.c:45:      if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
412
 
./src/ifdown.c:59:              if (ioctl(fd, SIOCSIFFLAGS, &ifr[i]) < 0) {
413
 
 
414
 
== networking() ==
415
 
./src/umount.c:117:     saddr.sin_family = AF_INET;
416
 
./src/nfsmount.c:250:   server_addr.sin_family = AF_INET;
417
 
./src/nfsmount.c:492:                   mount_server_addr.sin_family = AF_INET;
418
 
./src/nfsmount.c:503:                           mount_server_addr.sin_family = AF_INET;
419
 
./src/nfsmount.c:669:           fsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
420
 
./src/nfsmount.c:671:           fsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
421
 
./src/nfsmount.c:807:   sin.sin_family = AF_INET;
422
 
./src/ifdown.c:37:      if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
423
 
./src/net.c:191:                        ((struct sockaddr_in *)&(net->to))->sin_family = AF_INET;
424
 
./src/net.c:200:                        if ((net->sock_fp = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0
425
 
./src/wd_identify.c:85: if (write(watchdog, "V", 1) < 0)
426
 
./src/memory.c:81:      if (read(mem_fd, buf, sizeof(buf)) < 0) {
427
 
./src/mount.c:96:/* True for explicit read/write (-w).  */
428
 
./src/mount.c:392:      if (lseek(fd, 1024, SEEK_SET) != 1024 || read(fd, (char *)&sb, sizeof(sb)) != sizeof(sb))
429
 
./src/mount.c:406:              if (lseek(fd, 0, SEEK_SET) != 0 || read(fd, (char *)&xsb, sizeof(xsb)) != sizeof(xsb))
430
 
./src/mount.c:416:              if (lseek(fd, 8192, SEEK_SET) != 8192 || read(fd, (char *)&ufssb, sizeof(ufssb)) != sizeof(ufssb))
431
 
./src/mount.c:424:              if (lseek(fd, 0x8000, SEEK_SET) != 0x8000 || read(fd, (char *)&isosb, sizeof(isosb)) != sizeof(isosb))
432
 
./src/shutdown.c:406:           if (write(fd, (char *)&wtmp, sizeof(wtmp)) < 0)
433
 
./src/shutdown.c:422:                           if (read(fd_seed, buf, 512) == 512) {
434
 
./src/shutdown.c:423:                                   if (write(fd_bck, buf, 512) < 0)
435
 
./src/heartbeat.c:108:                  if (fwrite(timestamps + (lastts * TS_SIZE), TS_SIZE, hbstamps - lastts, hb) == 0) {
436
 
./src/heartbeat.c:113:                  if (fwrite(timestamps, TS_SIZE, lastts, hb) == 0) {
437
 
./src/heartbeat.c:119:                  if (fwrite(timestamps, TS_SIZE, nrts, hb) == 0) {
438
 
./src/keep_alive.c:107: if (write(watchdog_fd, "\0", 1) < 0) {
439
 
./src/keep_alive.c:143:         if (write(watchdog_fd, "V", 1) < 0) {
440
 
./src/load.c:70:        if (read(load_fd, buf, sizeof(buf)) < 0) {
441
 
./src/pidfile.c:48:     if (read(fd, buf, sizeof(buf)) < 0) {
442
 
./src/nfsmount.c:21: * Omit the call to connect() for Linux version 1.3.11 or later.
443
 
./src/nfsmount.c:669:           fsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
444
 
./src/nfsmount.c:671:           fsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
445
 
./src/nfsmount.c:695:    * connect() the socket for kernels 1.3.10 and below only,
446
 
./src/nfsmount.c:699:   if (linux_version_code() <= 66314 && connect(fsock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
447
 
./src/ifdown.c:37:      if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
448
 
./src/net.c:82:         j = sendto(sock_fp, (char *)outpack, DATALEN + 8, 0, &to, sizeof(struct sockaddr));
449
 
./src/net.c:200:                        if ((net->sock_fp = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0
450
 
./src/net.c:202:                            fatal_error(EX_SYSERR, "error opening socket (%s)", strerror(errno));
451
 
 
452
 
== http:// ==
453
 
./include/logmessage.h:52: * http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html
454
 
 
455
 
== encryption ==
456
 
 
457
 
== sql() ==
458
 
 
459
 
== tmp() ==
460
 
./src/lomount.c:91:     /* Just creating a device, say in /tmp, is probably a bad idea -
461
 
 
462
 
== priv_cmds (sudo, gksu, pkexec) ==
463
 
 
464
 
== envvars() ==
465
 
 
466
 
== webkit() ==
467
 
 
468
 
== comments (XXX, FIXME, TODO) ==
469
 
 
470
 
== unsafe input mechanisms ==
471