summaryrefslogtreecommitdiffstats
path: root/runtime/docs/html/shellsnoop_2dtr_8c-source.html
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/docs/html/shellsnoop_2dtr_8c-source.html')
-rw-r--r--runtime/docs/html/shellsnoop_2dtr_8c-source.html138
1 files changed, 138 insertions, 0 deletions
diff --git a/runtime/docs/html/shellsnoop_2dtr_8c-source.html b/runtime/docs/html/shellsnoop_2dtr_8c-source.html
new file mode 100644
index 00000000..7f6aa12c
--- /dev/null
+++ b/runtime/docs/html/shellsnoop_2dtr_8c-source.html
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/shellsnoop/dtr.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">shellsnoop</a></div>
+<h1>dtr.c</h1><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#define HASH_TABLE_BITS 8</span>
+00002 <span class="preprocessor"></span><span class="preprocessor">#define HASH_TABLE_SIZE (1&lt;&lt;HASH_TABLE_BITS)</span>
+00003 <span class="preprocessor"></span><span class="preprocessor">#define BUCKETS 16 </span><span class="comment">/* largest histogram width */</span>
+00004
+00005 <span class="preprocessor">#include "runtime.h"</span>
+00006 <span class="preprocessor">#include "io.c"</span>
+00007 <span class="preprocessor">#include "<a class="code" href="map_8c.html">map.c</a>"</span>
+00008 <span class="preprocessor">#include "copy.c"</span>
+00009 <span class="preprocessor">#include "probes.c"</span>
+00010
+00011 MODULE_DESCRIPTION(<span class="stringliteral">"SystemTap probe: shellsnoop"</span>);
+00012 MODULE_AUTHOR(<span class="stringliteral">"Martin Hunt &lt;hunt@redhat.com&gt;"</span>);
+00013
+00014 <a class="code" href="structmap__root.html">MAP</a> pids, arglist ;
+00015
+00016 <span class="keywordtype">int</span> inst_do_execve (<span class="keywordtype">char</span> * filename, <span class="keywordtype">char</span> __user *__user *argv, <span class="keywordtype">char</span> __user *__user *envp, <span class="keyword">struct</span> pt_regs * regs)
+00017 {
+00018 <span class="keyword">struct </span>map_node_str *ptr;
+00019
+00020 <span class="comment">/* watch shells only */</span>
+00021 <span class="comment">/* FIXME: detect more shells, like csh, tcsh, zsh */</span>
+00022
+00023 <span class="keywordflow">if</span> (!strcmp(current-&gt;comm,<span class="stringliteral">"bash"</span>) || !strcmp(current-&gt;comm,<span class="stringliteral">"sh"</span>) || !strcmp(current-&gt;comm, <span class="stringliteral">"zsh"</span>)
+00024 || !strcmp(current-&gt;comm, <span class="stringliteral">"tcsh"</span>) || !strcmp(current-&gt;comm, <span class="stringliteral">"pdksh"</span>))
+00025 {
+00026 dlog (<span class="stringliteral">"%d\t%d\t%d\t%s "</span>, current-&gt;uid, current-&gt;pid, current-&gt;parent-&gt;pid, filename);
+00027
+00028 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00029 <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a> (pids, 1);
+00030
+00031 <a class="code" href="map_8c.html#a26">_stp_list_clear</a> (arglist);
+00032 _stp_copy_argv_from_user (arglist, argv);
+00033 <a class="code" href="map_8h.html#a8">foreach</a> (arglist, ptr)
+00034 printk ("%s ", ptr-&gt;str);
+00035 printk ("\n");
+00036 }
+00037 jprobe_return();
+00038 return 0;
+00039 }
+00040
+00041 struct file * inst_filp_open (const <span class="keywordtype">char</span> * filename, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> mode)
+00042 {
+00043 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00044 <span class="keywordflow">if</span> (_stp_map_get_int64 (pids))
+00045 dlog (<span class="stringliteral">"%d\t%d\t%s\tO %s\n"</span>, current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, filename);
+00046
+00047 jprobe_return();
+00048 <span class="keywordflow">return</span> 0;
+00049 }
+00050
+00051 asmlinkage ssize_t inst_sys_read (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> __user * buf, size_t count)
+00052 {
+00053 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00054 <span class="keywordflow">if</span> (_stp_map_get_int64 (pids))
+00055 dlog (<span class="stringliteral">"%d\t%d\t%s\tR %d\n"</span>, current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, fd);
+00056
+00057 jprobe_return();
+00058 <span class="keywordflow">return</span> 0;
+00059 }
+00060
+00061 asmlinkage ssize_t inst_sys_write (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> __user * buf, size_t count)
+00062 {
+00063 size_t len;
+00064 <span class="keywordtype">char</span> str[256];
+00065 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00066 <span class="keywordflow">if</span> (_stp_map_get_int64 (pids))
+00067 {
+00068 <span class="keywordflow">if</span> (count &lt; 64)
+00069 len = count;
+00070 else
+00071 len = 64;
+00072 len = _stp_strncpy_from_user(str, buf, len);
+00073 if (len &lt; 0) len = 0;
+00074 str[len] = 0;
+00075 dlog ("%d\t%d\t%s\tW %s\n", current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, str);
+00076 }
+00077
+00078 jprobe_return();
+00079 return 0;
+00080 }
+00081
+00082 static struct jprobe dtr_probes[] = {
+00083 {
+00084 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"do_execve"</span>,
+00085 .entry = (kprobe_opcode_t *) inst_do_execve
+00086 },
+00087 {
+00088 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"filp_open"</span>,
+00089 .entry = (kprobe_opcode_t *) inst_filp_open
+00090 },
+00091 {
+00092 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_read"</span>,
+00093 .entry = (kprobe_opcode_t *) inst_sys_read
+00094 },
+00095 {
+00096 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_write"</span>,
+00097 .entry = (kprobe_opcode_t *) inst_sys_write
+00098 },
+00099 };
+00100
+00101 <span class="preprocessor">#define MAX_DTR_ROUTINE (sizeof(dtr_probes)/sizeof(struct jprobe))</span>
+00102 <span class="preprocessor"></span>
+00103 <span class="keyword">static</span> <span class="keywordtype">int</span> init_dtr(<span class="keywordtype">void</span>)
+00104 {
+00105 <span class="keywordtype">int</span> ret;
+00106
+00107 pids = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (10000, INT64);
+00108 arglist = <a class="code" href="map_8c.html#a25">_stp_list_new</a> (10, STRING);
+00109
+00110 ret = _stp_register_jprobes (dtr_probes, MAX_DTR_ROUTINE);
+00111
+00112 dlog(<span class="stringliteral">"instrumentation is enabled...\n"</span>);
+00113 <span class="keywordflow">return</span> ret;
+00114 }
+00115
+00116 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup_dtr(<span class="keywordtype">void</span>)
+00117 {
+00118 _stp_unregister_jprobes (dtr_probes, MAX_DTR_ROUTINE);
+00119 <a class="code" href="map_8c.html#a8">_stp_map_del</a> (pids);
+00120 dlog(<span class="stringliteral">"EXIT\n"</span>);
+00121 }
+00122
+00123 module_init(init_dtr);
+00124 module_exit(cleanup_dtr);
+00125 MODULE_LICENSE(<span class="stringliteral">"GPL"</span>);
+00126
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>