pwn 0.4.671 → 0.4.673

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7da5c11247c09b3a6355dd825d5b200c7b54845d2b02b4a91a2b651ac6e0f693
4
- data.tar.gz: 8ae730c8dcc7af833543ac7b999fb075dd53e64cfb8a348791caadc03bf16c4a
3
+ metadata.gz: 66259ccdc59be89f796f56e88a20f9eb5bef320c46a4b7fc268b62f664e50c6e
4
+ data.tar.gz: 162ad18b794121a96802d6f5de739b4fc22eb8c0dda0a780fc6144fedc107af3
5
5
  SHA512:
6
- metadata.gz: 7480b0859bedc2c26bc36fef113eeb0981169f500edfe0d3ece6a69b36a5c5e10bffc052c0640d705620e456233254224df1d5a8bb904b3301189572d8d0a2d9
7
- data.tar.gz: 6486d7ffa7d468d772639c8666594e21b326de1a5acbafad7fdc966746237df97ed43e7883016d98df3692ad2c0b0a7b623a73162885da0f196f0b1260050375
6
+ metadata.gz: 2e6515b72bf8b01805b50cc9e5bb701edf2fb725182c1a1c425188e8d2542badd19cd93cbdf4c358fc2c2cfcb9c49341b4322cc76d596a200548eebe73c4ffd4
7
+ data.tar.gz: 846a1b1ca1f1ef9bc2affdb57ea1accf45f210e86085da968b54d01e45e9f6d6103f8108a7ef7a2888f4ebadd57988f68afafea86925f8c7c4867915388c36a7
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.2.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.671]:001 >>> PWN.help
40
+ pwn[v0.4.673]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.2.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.671]:001 >>> PWN.help
55
+ pwn[v0.4.673]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -2,7 +2,6 @@
2
2
  # frozen_string_literal: false
3
3
 
4
4
  require 'optparse'
5
- require 'nokogiri'
6
5
  require 'pwn'
7
6
 
8
7
  opts = {}
@@ -42,7 +41,7 @@ with_tor = true if opts[:with_tor]
42
41
  with_tor ||= false
43
42
  if with_tor
44
43
  tor_obj = PWN::Plugins::Tor.start
45
- proxy = "socks4://#{tor_obj[:ip]}:#{tor_obj[:port]}"
44
+ proxy = ["socks4://#{tor_obj[:ip]}:#{tor_obj[:port]}"]
46
45
  end
47
46
 
48
47
  File.new(exclude_file, 'w') unless File.exist?(exclude_file)
@@ -106,11 +105,29 @@ latest_tcp_results = "#{nmap_results_root}/nmap_latest_tcp_results"
106
105
  latest_udp_results = "#{nmap_results_root}/nmap_latest_udp_results"
107
106
 
108
107
  begin
108
+ # Per man nmap:
109
+ # The main effects of T0 are serializing the scan so only one port
110
+ # is scanned at a time, and waiting five minutes between sending
111
+ # each probe.
112
+ # T1 and T2 are similar but they only wait 15 seconds and 0.4 seconds,
113
+ # respectively, between probes.
114
+ # T3 is Nmap's default behavior, which includes parallelization.
115
+ # T4 does the equivalent of --max-rtt-timeout 1250ms --min-rtt-timeout 100ms
116
+ # --initial-rtt-timeout 500ms --max-retries 6 and sets the maximum TCP and
117
+ # SCTP scan delay to 10ms.
118
+ # T5 does the equivalent of --max-rtt-timeout 300ms --min-rtt-timeout 50ms
119
+ # --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m
120
+ # --script-timeout 10m --max-scan-delay as well as setting the maximum TCP
121
+ # and SCTP scan delay to 5ms. Maximum UDP scan delay is not set by T4 or T5,
122
+ # but it can be set with the --max-scan-delay option.
123
+
109
124
  # Target Discovery Scan
125
+ # Using -T5 template to reduce number of
126
+ # retransmission attempts on filtered ports.
110
127
  PWN::Plugins::NmapIt.port_scan do |nmap|
111
128
  nmap.exclude_file = exclude_file
112
129
  nmap.interface = interface
113
- nmap.aggressive_timing = true
130
+ nmap.insane_timing = true
114
131
  nmap.ping = true
115
132
  nmap.arp_ping = true
116
133
  nmap.icmp_echo_discovery = true
@@ -121,6 +138,7 @@ begin
121
138
  nmap.sctp_init_ping = discovery_ports.values
122
139
  nmap.output_all = latest_discovery_results
123
140
  nmap.targets = ip_range
141
+ nmap.randomize_hosts = true
124
142
  nmap.proxies = proxy if with_tor
125
143
  end
126
144
 
@@ -135,19 +153,24 @@ begin
135
153
  end
136
154
  end
137
155
  end
156
+ sorted_targets = File.readlines(target_file).sort.join
157
+ File.write(target_file, sorted_targets)
138
158
 
139
159
  # Switch Tor Exit Node if with_tor
140
160
  PWN::Plugins::Tor.switch_exit_node(tor_obj: tor_obj) if with_tor
141
161
 
142
162
  # TCP Scan
163
+ # Using -T5 template to reduce number of
164
+ # retransmission attempts on filtered ports.
143
165
  PWN::Plugins::NmapIt.port_scan do |nmap|
144
166
  nmap.target_file = target_file
167
+ nmap.randomize_hosts = true
145
168
  nmap.show_reason = true
146
169
  nmap.exclude_file = exclude_file
147
170
  nmap.interface = interface
148
171
  nmap.min_host_group = 3
149
172
  nmap.host_timeout = '999m'
150
- nmap.aggressive_timing = true
173
+ nmap.insane_timing = true
151
174
  nmap.skip_discovery = true
152
175
  nmap.syn_scan = true
153
176
  nmap.default_script = true
@@ -166,14 +189,17 @@ begin
166
189
  PWN::Plugins::Tor.switch_exit_node(tor_obj: tor_obj) if with_tor
167
190
 
168
191
  # UDP Scan
192
+ # Using -T5 template to reduce number of
193
+ # retransmission attempts on filtered ports.
169
194
  PWN::Plugins::NmapIt.port_scan do |nmap|
170
195
  nmap.target_file = target_file
196
+ nmap.randomize_hosts = true
171
197
  nmap.show_reason = true
172
198
  nmap.exclude_file = exclude_file
173
199
  nmap.interface = interface
174
200
  nmap.min_host_group = 3
175
201
  nmap.host_timeout = '999m'
176
- nmap.aggressive_timing = true
202
+ nmap.insane_timing = true
177
203
  nmap.skip_discovery = true
178
204
  nmap.udp_scan = true
179
205
  nmap.default_script = true
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.671'
4
+ VERSION = '0.4.673'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.671
4
+ version: 0.4.673
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
@@ -1143,7 +1143,6 @@ executables:
1143
1143
  extensions: []
1144
1144
  extra_rdoc_files: []
1145
1145
  files:
1146
- - ".each do |bytes_matched|"
1147
1146
  - ".github/FUNDING.yml"
1148
1147
  - ".github/ISSUE_TEMPLATE/bug_report.md"
1149
1148
  - ".gitignore"
@@ -1,271 +0,0 @@
1
- => [["static void gv_init(void) {\n /* list of builtins, enable demand loading */\n gvc = gvContextPlugins(lt_preloaded_symbols, DEMAND_LOADING);\n}",
2
- "\n /* list of builtins, enable demand loading */\n gvc = gvContextPlugins(lt_preloaded_symbols, DEMAND_LOADING);\n",
3
- "}"],
4
- ["Agraph_t *graph(char *name)\n{\n if (!gvc)\n gv_init();\n return agopen(name, Agundirected, 0);\n}",
5
- "\n if (!gvc)\n gv_init();\n return agopen(name, Agundirected, 0);\n",
6
- "}"],
7
- ["Agraph_t *digraph(char *name)\n{\n if (!gvc)\n gv_init();\n return agopen(name, Agdirected, 0);\n}",
8
- "\n if (!gvc)\n gv_init();\n return agopen(name, Agdirected, 0);\n",
9
- "}"],
10
- ["Agraph_t *strictgraph(char *name)\n{\n if (!gvc)\n gv_init();\n return agopen(name, Agstrictundirected, 0);\n}",
11
- "\n if (!gvc)\n gv_init();\n return agopen(name, Agstrictundirected, 0);\n",
12
- "}"],
13
- ["Agraph_t *strictdigraph(char *name)\n{\n if (!gvc)\n gv_init();\n return agopen(name, Agstrictdirected, 0);\n}",
14
- "\n if (!gvc)\n gv_init();\n return agopen(name, Agstrictdirected, 0);\n",
15
- "}"],
16
- ["Agraph_t *readstring(char *string)\n{\n if (!gvc)\n gv_init();\n return agmemread(string);\n}",
17
- "\n if (!gvc)\n gv_init();\n return agmemread(string);\n",
18
- "}"],
19
- ["Agraph_t *read(FILE *f)\n{\n if (!gvc)\n gv_init();\n return agread(f, NULL);\n}",
20
- "\n if (!gvc)\n gv_init();\n return agread(f, NULL);\n",
21
- "}"],
22
- ["Agraph_t *read(const char *filename)\n{\n FILE *f;\n Agraph_t *g;\n\n f = fopen(filename, \"r\");\n if (!f)\n return NULL;\n if (!gvc)\n gv_init();\n g = agread(f, NULL);\n fclose(f);\n return g;\n}",
23
- "\n FILE *f;\n Agraph_t *g;\n\n f = fopen(filename, \"r\");\n if (!f)\n return NULL;\n if (!gvc)\n gv_init();\n g = agread(f, NULL);\n fclose(f);\n return g;\n",
24
- "}"],
25
- ["Agraph_t *graph(Agraph_t *g, char *name)\n{\n if (!gvc)\n gv_init();\n return agsubg(g, name, 1);\n}",
26
- "\n if (!gvc)\n gv_init();\n return agsubg(g, name, 1);\n",
27
- "}"],
28
- ["Agnode_t *node(Agraph_t *g, char *name)\n{\n if (!gvc)\n return NULL;\n return agnode(g, name, 1);\n}",
29
- "\n if (!gvc)\n return NULL;\n return agnode(g, name, 1);\n",
30
- "}"],
31
- ["Agedge_t *edge(Agraph_t* g, Agnode_t *t, Agnode_t *h)\n{\n if (!gvc || !t || !h || !g)\n return NULL;\n // edges from/to the protonode are not permitted\n if (AGTYPE(t) == AGRAPH || AGTYPE(h) == AGRAPH)\n\treturn NULL;\n return agedge(g, t, h, NULL, 1);\n}",
32
- "\n if (!gvc || !t || !h || !g)\n return NULL;\n // edges from/to the protonode are not permitted\n if (AGTYPE(t) == AGRAPH || AGTYPE(h) == AGRAPH)\n\treturn NULL;\n return agedge(g, t, h, NULL, 1);\n",
33
- "}"],
34
- ["Agedge_t *edge(Agnode_t *t, Agnode_t *h)\n{\n return edge(agraphof(t), t, h);\n}",
35
- "\n return edge(agraphof(t), t, h);\n",
36
- "}"],
37
- ["Agedge_t *edge(char *tname, Agnode_t *h)\n{\n return edge(node(agraphof(h), tname), h);\n}",
38
- "\n return edge(node(agraphof(h), tname), h);\n",
39
- "}"],
40
- ["Agedge_t *edge(Agnode_t *t, char *hname)\n{\n return edge(t, node(agraphof(t), hname));\n}",
41
- "\n return edge(t, node(agraphof(t), hname));\n",
42
- "}"],
43
- ["Agedge_t *edge(Agraph_t *g, char *tname, char *hname)\n{\n return edge(g, node(g, tname), node(g, hname));\n}",
44
- "\n return edge(g, node(g, tname), node(g, hname));\n",
45
- "}"],
46
- ["static char* myagxget(void *obj, Agsym_t *a)\n{\n int len;\n char *val, *hs;\n\n if (!obj || !a)\n return emptystring;\n val = agxget(obj, a);\n if (!val)\n return emptystring;\n if (a->name[0] == 'l' && strcmp(a->name, \"label\") == 0 && aghtmlstr(val)) {\n len = strlen(val);\n hs = (char*)malloc(len + 3);\n hs[0] = '<';\n strcpy(hs+1, val);\n hs[len+1] = '>';\n hs[len+2] = '\\0';\n return hs;\n }\n return val;\n}",
47
- "\n int len;\n char *val, *hs;\n\n if (!obj || !a)\n return emptystring;\n val = agxget(obj, a);\n if (!val)\n return emptystring;\n if (a->name[0] == 'l' && strcmp(a->name, \"label\") == 0 && aghtmlstr(val)) {\n len = strlen(val);\n hs = (char*)malloc(len + 3);\n hs[0] = '<';\n strcpy(hs+1, val);\n hs[len+1] = '>';\n hs[len+2] = '\\0';\n return hs;\n }\n return val;\n",
48
- "}"],
49
- ["char *getv(Agraph_t *g, Agsym_t *a)\n{\n return myagxget(g, a);\n}",
50
- "\n return myagxget(g, a);\n",
51
- "}"],
52
- ["char *getv(Agraph_t *g, char *attr)\n{\n Agsym_t *a;\n\n if (!g || !attr)\n return NULL;\n a = agfindattr(agroot(g), attr);\n return myagxget(g, a);\n}",
53
- "\n Agsym_t *a;\n\n if (!g || !attr)\n return NULL;\n a = agfindattr(agroot(g), attr);\n return myagxget(g, a);\n",
54
- "}"],
55
- ["static void myagxset(void *obj, Agsym_t *a, char *val)\n{\n int len;\n char *hs;\n\n if (a->name[0] == 'l' && val[0] == '<' && strcmp(a->name, \"label\") == 0) {\n len = strlen(val);\n if (val[len-1] == '>') {\n hs = strdup(val+1);\n *(hs+len-2) = '\\0';\n val = agstrdup_html(agraphof(obj),hs);\n free(hs);\n }\n }\n agxset(obj, a, val);\n}",
56
- "\n int len;\n char *hs;\n\n if (a->name[0] == 'l' && val[0] == '<' && strcmp(a->name, \"label\") == 0) {\n len = strlen(val);\n if (val[len-1] == '>') {\n hs = strdup(val+1);\n *(hs+len-2) = '\\0';\n val = agstrdup_html(agraphof(obj),hs);\n free(hs);\n }\n }\n agxset(obj, a, val);\n",
57
- "}"],
58
- ["char *setv(Agraph_t *g, Agsym_t *a, char *val)\n{\n if (!g || !a || !val)\n return NULL;\n myagxset(g, a, val);\n return val;\n}",
59
- "\n if (!g || !a || !val)\n return NULL;\n myagxset(g, a, val);\n return val;\n",
60
- "}"],
61
- ["char *setv(Agraph_t *g, char *attr, char *val)\n{\n Agsym_t *a;\n\n if (!g || !attr || !val)\n return NULL;\n a = agfindattr(agroot(g), attr);\n if (!a)\n a = agraphattr(g->root, attr, emptystring);\n myagxset(g, a, val);\n return val;\n}",
62
- "\n Agsym_t *a;\n\n if (!g || !attr || !val)\n return NULL;\n a = agfindattr(agroot(g), attr);\n if (!a)\n a = agraphattr(g->root, attr, emptystring);\n myagxset(g, a, val);\n return val;\n",
63
- "}"],
64
- ["char *getv(Agnode_t *n, Agsym_t *a)\n{\n if (!n || !a)\n return NULL;\n if (AGTYPE(n) == AGRAPH) // protonode \n\treturn NULL; // FIXME ??\n return myagxget(n, a);\n}",
65
- "\n if (!n || !a)\n return NULL;\n if (AGTYPE(n) == AGRAPH) // protonode \n\treturn NULL; // FIXME ??\n return myagxget(n, a);\n",
66
- "}"],
67
- ["char *getv(Agnode_t *n, char *attr)\n{\n Agraph_t *g;\n Agsym_t *a;\n\n if (!n || !attr)\n return NULL;\n if (AGTYPE(n) == AGRAPH) // protonode \n\treturn NULL; // FIXME ??\n g = agroot(agraphof(n));\n a = agattr(g, AGNODE, attr, NULL);\n return myagxget(n, a);\n}",
68
- "\n Agraph_t *g;\n Agsym_t *a;\n\n if (!n || !attr)\n return NULL;\n if (AGTYPE(n) == AGRAPH) // protonode \n\treturn NULL; // FIXME ??\n g = agroot(agraphof(n));\n a = agattr(g, AGNODE, attr, NULL);\n return myagxget(n, a);\n",
69
- "}"],
70
- ["char *setv(Agnode_t *n, Agsym_t *a, char *val)\n{\n if (!n || !a || !val)\n return NULL;\n if (AGTYPE(n) == AGRAPH) // protonode \n\treturn NULL; // FIXME ??\n myagxset(n, a, val);\n return val;\n}",
71
- "\n if (!n || !a || !val)\n return NULL;\n if (AGTYPE(n) == AGRAPH) // protonode \n\treturn NULL; // FIXME ??\n myagxset(n, a, val);\n return val;\n",
72
- "}"],
73
- ["char *setv(Agnode_t *n, char *attr, char *val)\n{\n Agraph_t *g;\n Agsym_t *a;\n\n if (!n || !attr || !val)\n return NULL;\n if (AGTYPE(n) == AGRAPH) { // protonode \n\tg = (Agraph_t*)n;\n \ta = agattr(g, AGNODE, attr, val); // create default attribute in psuodo protonode\n\t // FIXME? - deal with html in \"label\" attributes\n\treturn val;\n }\n g = agroot(agraphof(n));\n a = agattr(g, AGNODE, attr, NULL);\n if (!a)\n a = agnodeattr(g, attr, emptystring);\n myagxset(n, a, val);\n return val;\n}",
74
- "\n Agraph_t *g;\n Agsym_t *a;\n\n if (!n || !attr || !val)\n return NULL;\n if (AGTYPE(n) == AGRAPH) { // protonode \n\tg = (Agraph_t*)n;\n \ta = agattr(g, AGNODE, attr, val); // create default attribute in psuodo protonode\n\t // FIXME? - deal with html in \"label\" attributes\n\treturn val;\n }\n g = agroot(agraphof(n));\n a = agattr(g, AGNODE, attr, NULL);\n if (!a)\n a = agnodeattr(g, attr, emptystring);\n myagxset(n, a, val);\n return val;\n",
75
- "}"],
76
- ["char *getv(Agedge_t *e, Agsym_t *a)\n{\n if (!e || !a)\n return NULL;\n if (AGTYPE(e) == AGRAPH) // protoedge \n\treturn NULL; // FIXME ??\n return myagxget(e, a);\n}",
77
- "\n if (!e || !a)\n return NULL;\n if (AGTYPE(e) == AGRAPH) // protoedge \n\treturn NULL; // FIXME ??\n return myagxget(e, a);\n",
78
- "}"],
79
- ["char *getv(Agedge_t *e, char *attr)\n{\n Agraph_t *g;\n Agsym_t *a;\n\n if (!e || !attr)\n return NULL;\n if (AGTYPE(e) == AGRAPH) // protoedge \n\treturn NULL; // FIXME ??\n g = agraphof(agtail(e));\n a = agattr(g, AGEDGE, attr, NULL);\n return myagxget(e, a);\n}",
80
- "\n Agraph_t *g;\n Agsym_t *a;\n\n if (!e || !attr)\n return NULL;\n if (AGTYPE(e) == AGRAPH) // protoedge \n\treturn NULL; // FIXME ??\n g = agraphof(agtail(e));\n a = agattr(g, AGEDGE, attr, NULL);\n return myagxget(e, a);\n",
81
- "}"],
82
- ["char *setv(Agedge_t *e, Agsym_t *a, char *val)\n{\n if (!e || !a || !val)\n return NULL;\n if (AGTYPE(e) == AGRAPH) // protoedge \n\treturn NULL; // FIXME ??\n myagxset(e, a, val);\n return val;\n}",
83
- "\n if (!e || !a || !val)\n return NULL;\n if (AGTYPE(e) == AGRAPH) // protoedge \n\treturn NULL; // FIXME ??\n myagxset(e, a, val);\n return val;\n",
84
- "}"],
85
- ["char *setv(Agedge_t *e, char *attr, char *val)\n{\n Agraph_t *g;\n Agsym_t *a;\n\n if (!e || !attr || !val)\n return NULL;\n if (AGTYPE(e) == AGRAPH) { // protoedge \n\tg = (Agraph_t*)e;\n \ta = agattr(g, AGEDGE, attr, val); // create default attribute in pseudo protoedge\n\t // FIXME? - deal with html in \"label\" attributes\n\treturn val;\n }\n g = agroot(agraphof(agtail(e)));\n a = agattr(g, AGEDGE, attr, NULL);\n if (!a)\n a = agattr(g, AGEDGE, attr, emptystring);\n myagxset(e, a, val);\n return val;\n}",
86
- "\n Agraph_t *g;\n Agsym_t *a;\n\n if (!e || !attr || !val)\n return NULL;\n if (AGTYPE(e) == AGRAPH) { // protoedge \n\tg = (Agraph_t*)e;\n \ta = agattr(g, AGEDGE, attr, val); // create default attribute in pseudo protoedge\n\t // FIXME? - deal with html in \"label\" attributes\n\treturn val;\n }\n g = agroot(agraphof(agtail(e)));\n a = agattr(g, AGEDGE, attr, NULL);\n if (!a)\n a = agattr(g, AGEDGE, attr, emptystring);\n myagxset(e, a, val);\n return val;\n",
87
- "}"],
88
- ["Agraph_t *findsubg(Agraph_t *g, char *name)\n{\n if (!g || !name)\n return NULL;\n return agsubg(g, name, 0);\n}",
89
- "\n if (!g || !name)\n return NULL;\n return agsubg(g, name, 0);\n",
90
- "}"],
91
- ["Agnode_t *findnode(Agraph_t *g, char *name)\n{\n if (!g || !name)\n return NULL;\n return agnode(g, name, 0);\n}",
92
- "\n if (!g || !name)\n return NULL;\n return agnode(g, name, 0);\n",
93
- "}"],
94
- ["Agedge_t *findedge(Agnode_t *t, Agnode_t *h)\n{\n if (!t || !h)\n return NULL;\n if (AGTYPE(t) == AGRAPH || AGTYPE(h) == AGRAPH)\n\treturn NULL;\n return agfindedge(agraphof(t), t, h);\n}",
95
- "\n if (!t || !h)\n return NULL;\n if (AGTYPE(t) == AGRAPH || AGTYPE(h) == AGRAPH)\n\treturn NULL;\n return agfindedge(agraphof(t), t, h);\n",
96
- "}"],
97
- ["Agsym_t *findattr(Agraph_t *g, char *name)\n{\n if (!g || !name)\n return NULL;\n return agfindattr(g, name);\n}",
98
- "\n if (!g || !name)\n return NULL;\n return agfindattr(g, name);\n",
99
- "}"],
100
- ["Agsym_t *findattr(Agnode_t *n, char *name)\n{\n if (!n || !name)\n return NULL;\n return agfindattr(n, name);\n}",
101
- "\n if (!n || !name)\n return NULL;\n return agfindattr(n, name);\n",
102
- "}"],
103
- ["Agsym_t *findattr(Agedge_t *e, char *name)\n{\n if (!e || !name)\n return NULL;\n return agfindattr(e, name);\n}",
104
- "\n if (!e || !name)\n return NULL;\n return agfindattr(e, name);\n",
105
- "}"],
106
- ["Agnode_t *headof(Agedge_t *e)\n{\n if (!e)\n return NULL;\n if (AGTYPE(e) == AGRAPH)\n\treturn NULL;\n return aghead(e);\n}",
107
- "\n if (!e)\n return NULL;\n if (AGTYPE(e) == AGRAPH)\n\treturn NULL;\n return aghead(e);\n",
108
- "}"],
109
- ["Agnode_t *tailof(Agedge_t *e)\n{\n if (!e)\n return NULL;\n if (AGTYPE(e) == AGRAPH)\n\treturn NULL;\n return agtail(e);\n}",
110
- "\n if (!e)\n return NULL;\n if (AGTYPE(e) == AGRAPH)\n\treturn NULL;\n return agtail(e);\n",
111
- "}"],
112
- ["Agraph_t *graphof(Agraph_t *g)\n{\n if (!g || g == g->root)\n return NULL;\n return agroot(g);\n}",
113
- "\n if (!g || g == g->root)\n return NULL;\n return agroot(g);\n",
114
- "}"],
115
- ["Agraph_t *graphof(Agedge_t *e)\n{\n if (!e)\n return NULL;\n if (AGTYPE(e) == AGRAPH)\n\treturn (Agraph_t*)e; /* graph of protoedge is itself recast */\n return agraphof(agtail(e));\n}",
116
- "\n if (!e)\n return NULL;\n if (AGTYPE(e) == AGRAPH)\n\treturn (Agraph_t*)e; /* graph of protoedge is itself recast */\n return agraphof(agtail(e));\n",
117
- "}"],
118
- ["Agraph_t *graphof(Agnode_t *n)\n{\n if (!n)\n return NULL;\n if (AGTYPE(n) == AGRAPH)\n\treturn (Agraph_t*)n; /* graph of protonode is itself recast */\n return agraphof(n);\n}",
119
- "\n if (!n)\n return NULL;\n if (AGTYPE(n) == AGRAPH)\n\treturn (Agraph_t*)n; /* graph of protonode is itself recast */\n return agraphof(n);\n",
120
- "}"],
121
- ["Agraph_t *rootof(Agraph_t *g)\n{\n if (!g)\n return NULL;\n return agroot(g);\n}",
122
- "\n if (!g)\n return NULL;\n return agroot(g);\n",
123
- "}"],
124
- ["Agnode_t *protonode(Agraph_t *g)\n{\n if (!g)\n return NULL;\n return (Agnode_t *)g; // gross abuse of the type system!\n}",
125
- "\n if (!g)\n return NULL;\n return (Agnode_t *)g; // gross abuse of the type system!\n",
126
- "}"],
127
- ["Agedge_t *protoedge(Agraph_t *g)\n{\n if (!g)\n return NULL;\n return (Agedge_t *)g; // gross abuse of the type system!\n}",
128
- "\n if (!g)\n return NULL;\n return (Agedge_t *)g; // gross abuse of the type system!\n",
129
- "}"],
130
- ["char *nameof(Agraph_t *g)\n{\n if (!g)\n return NULL;\n return agnameof(g);\n}",
131
- "\n if (!g)\n return NULL;\n return agnameof(g);\n",
132
- "}"],
133
- ["char *nameof(Agnode_t *n)\n{\n if (!n)\n return NULL;\n if (AGTYPE(n) == AGRAPH)\n\treturn NULL;\n return agnameof(n);\n}",
134
- "\n if (!n)\n return NULL;\n if (AGTYPE(n) == AGRAPH)\n\treturn NULL;\n return agnameof(n);\n",
135
- "}"],
136
- ["char *nameof(Agsym_t *a)\n{\n if (!a)\n return NULL;\n return a->name;\n}",
137
- "\n if (!a)\n return NULL;\n return a->name;\n",
138
- "}"],
139
- ["bool ok(Agraph_t *g)\n{\n if (!g) \n return false;\n return true;\n}",
140
- "\n if (!g) \n return false;\n return true;\n",
141
- "}"],
142
- ["bool ok(Agnode_t *n)\n{\n if (!n) \n return false;\n return true;\n}",
143
- "\n if (!n) \n return false;\n return true;\n",
144
- "}"],
145
- ["bool ok(Agedge_t *e)\n{\n if (!e) \n return false;\n return true;\n}",
146
- "\n if (!e) \n return false;\n return true;\n",
147
- "}"],
148
- ["bool ok(Agsym_t *a)\n{\n if (!a) \n return false;\n return true;\n}",
149
- "\n if (!a) \n return false;\n return true;\n",
150
- "}"],
151
- ["Agraph_t *firstsubg(Agraph_t *g)\n{\n if (!g)\n return NULL;\n return agfstsubg(g);\n}",
152
- "\n if (!g)\n return NULL;\n return agfstsubg(g);\n",
153
- "}"],
154
- ["Agraph_t *nextsubg(Agraph_t *g, Agraph_t *sg)\n{\n\n if (!g || !sg)\n return NULL;\n return agnxtsubg(sg);\n}",
155
- "\n\n if (!g || !sg)\n return NULL;\n return agnxtsubg(sg);\n",
156
- "}"],
157
- ["Agraph_t *firstsupg(Agraph_t *g)\n{\n return g->parent;\n}", "\n return g->parent;\n", "}"],
158
- ["Agraph_t *nextsupg(Agraph_t *g, Agraph_t *sg)\n{\n return NULL;\n}",
159
- "\n return NULL;\n",
160
- "}"],
161
- ["Agedge_t *firstout(Agraph_t *g)\n{\n Agnode_t *n;\n Agedge_t *e;\n\n if (!g)\n return NULL;\n for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\te = agfstout(g, n);\n\tif (e) return e;\n }\n return NULL;\n}",
162
- "\n Agnode_t *n;\n Agedge_t *e;\n\n if (!g)\n return NULL;\n for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\te = agfstout(g, n);\n\tif (e) return e;\n }\n return NULL;\n",
163
- "}"],
164
- ["Agedge_t *nextout(Agraph_t *g, Agedge_t *e)\n{\n Agnode_t *n;\n Agedge_t *ne;\n\n if (!g || !e)\n return NULL;\n ne = agnxtout(g, e);\n if (ne)\n return (ne);\n for (n = agnxtnode(g, agtail(e)); n; n = agnxtnode(g, n)) {\n\tne = agfstout(g, n);\n\tif (ne) return ne;\n }\n return NULL;\n}",
165
- "\n Agnode_t *n;\n Agedge_t *ne;\n\n if (!g || !e)\n return NULL;\n ne = agnxtout(g, e);\n if (ne)\n return (ne);\n for (n = agnxtnode(g, agtail(e)); n; n = agnxtnode(g, n)) {\n\tne = agfstout(g, n);\n\tif (ne) return ne;\n }\n return NULL;\n",
166
- "}"],
167
- ["Agedge_t *firstedge(Agraph_t *g)\n{\n return firstout(g);\n} \n\nAgedge_t *nextedge(Agraph_t *g, Agedge_t *e)\n{\n return nextout(g, e);\n} \n\nAgedge_t *firstout(Agnode_t *n)\n{\n if (!n)\n return NULL;\n return agfstout(agraphof(n), n);\n}",
168
- "\n return firstout(g);\n} \n\nAgedge_t *nextedge(Agraph_t *g, Agedge_t *e)\n{\n return nextout(g, e);\n} \n\nAgedge_t *firstout(Agnode_t *n)\n{\n if (!n)\n return NULL;\n return agfstout(agraphof(n), n);\n",
169
- "}"],
170
- ["Agedge_t *nextout(Agnode_t *n, Agedge_t *e)\n{\n if (!n || !e)\n return NULL;\n return agnxtout(agraphof(n), e);\n}",
171
- "\n if (!n || !e)\n return NULL;\n return agnxtout(agraphof(n), e);\n",
172
- "}"],
173
- ["Agnode_t *firsthead(Agnode_t *n)\n{\n Agedge_t *e;\n\n if (!n)\n return NULL;\n e = agfstout(agraphof(n), n);\n if (!e)\n return NULL;\n return aghead(e);\n}",
174
- "\n Agedge_t *e;\n\n if (!n)\n return NULL;\n e = agfstout(agraphof(n), n);\n if (!e)\n return NULL;\n return aghead(e);\n",
175
- "}"],
176
- ["Agnode_t *nexthead(Agnode_t *n, Agnode_t *h)\n{\n Agedge_t *e;\n Agraph_t *g;\n\n if (!n || !h)\n return NULL;\n g = agraphof(n);\n e = agfindedge(g, n, h);\n if (!e)\n return NULL;\n do {\n e = agnxtout(g, AGMKOUT(e));\n if (!e)\n return NULL;\n } while (aghead(e) == h);\n return aghead(e);\n}",
177
- "\n Agedge_t *e;\n Agraph_t *g;\n\n if (!n || !h)\n return NULL;\n g = agraphof(n);\n e = agfindedge(g, n, h);\n if (!e)\n return NULL;\n do {\n e = agnxtout(g, AGMKOUT(e));\n if (!e)\n return NULL;\n } while (aghead(e) == h);\n return aghead(e);\n",
178
- "}"],
179
- ["Agedge_t *firstedge(Agnode_t *n)\n{\n if (!n)\n return NULL;\n return agfstedge(agraphof(n), n);\n} \n\nAgedge_t *nextedge(Agnode_t *n, Agedge_t *e)\n{\n if (!n || !e)\n return NULL;\n return agnxtedge(agraphof(n), e, n); \n} \n\nAgedge_t *firstin(Agraph_t *g)\n{\n Agnode_t *n;\n\n if (!g)\n return NULL;\n n = agfstnode(g);\n if (!n)\n return NULL;\n return agfstin(g, n);\n}",
180
- "\n if (!n)\n return NULL;\n return agfstedge(agraphof(n), n);\n} \n\nAgedge_t *nextedge(Agnode_t *n, Agedge_t *e)\n{\n if (!n || !e)\n return NULL;\n return agnxtedge(agraphof(n), e, n); \n} \n\nAgedge_t *firstin(Agraph_t *g)\n{\n Agnode_t *n;\n\n if (!g)\n return NULL;\n n = agfstnode(g);\n if (!n)\n return NULL;\n return agfstin(g, n);\n",
181
- "}"],
182
- ["Agedge_t *nextin(Agraph_t *g, Agedge_t *e)\n{\n Agnode_t *n;\n Agedge_t *ne;\n\n if (!g || !e)\n return NULL;\n ne = agnxtin(g, e);\n if (ne)\n return (ne);\n n = agnxtnode(g, aghead(e));\n if (!n)\n return NULL;\n return agfstin(g, n);\n}",
183
- "\n Agnode_t *n;\n Agedge_t *ne;\n\n if (!g || !e)\n return NULL;\n ne = agnxtin(g, e);\n if (ne)\n return (ne);\n n = agnxtnode(g, aghead(e));\n if (!n)\n return NULL;\n return agfstin(g, n);\n",
184
- "}"],
185
- ["Agedge_t *firstin(Agnode_t *n)\n{\n if (!n)\n return NULL;\n return agfstin(agraphof(n), n);\n}",
186
- "\n if (!n)\n return NULL;\n return agfstin(agraphof(n), n);\n",
187
- "}"],
188
- ["Agedge_t *nextin(Agnode_t *n, Agedge_t *e)\n{\n if (!n || !e)\n return NULL;\n return agnxtin(agraphof(n), e);\n}",
189
- "\n if (!n || !e)\n return NULL;\n return agnxtin(agraphof(n), e);\n",
190
- "}"],
191
- ["Agnode_t *firsttail(Agnode_t *n)\n{\n Agedge_t *e;\n\n if (!n)\n return NULL;\n e = agfstin(agraphof(n), n);\n if (!e)\n return NULL;\n return agtail(e);\n}",
192
- "\n Agedge_t *e;\n\n if (!n)\n return NULL;\n e = agfstin(agraphof(n), n);\n if (!e)\n return NULL;\n return agtail(e);\n",
193
- "}"],
194
- ["Agnode_t *nexttail(Agnode_t *n, Agnode_t *t)\n{\n Agedge_t *e;\n Agraph_t *g;\n\n if (!n || !t)\n return NULL;\n g = agraphof(n);\n e = agfindedge(g, t, n);\n if (!e)\n return NULL;\n do {\n e = agnxtin(g, AGMKIN(e));\n if (!e)\n return NULL;\n } while (agtail(e) == t);\n return agtail(e);\n}",
195
- "\n Agedge_t *e;\n Agraph_t *g;\n\n if (!n || !t)\n return NULL;\n g = agraphof(n);\n e = agfindedge(g, t, n);\n if (!e)\n return NULL;\n do {\n e = agnxtin(g, AGMKIN(e));\n if (!e)\n return NULL;\n } while (agtail(e) == t);\n return agtail(e);\n",
196
- "}"],
197
- ["Agnode_t *firstnode(Agraph_t *g)\n{\n if (!g)\n return NULL;\n return agfstnode(g);\n}",
198
- "\n if (!g)\n return NULL;\n return agfstnode(g);\n",
199
- "}"],
200
- ["Agnode_t *nextnode(Agraph_t *g, Agnode_t *n)\n{\n if (!g || !n)\n return NULL;\n return agnxtnode(g, n);\n}",
201
- "\n if (!g || !n)\n return NULL;\n return agnxtnode(g, n);\n",
202
- "}"],
203
- ["Agnode_t *firstnode(Agedge_t *e)\n{\n if (!e)\n return NULL;\n return agtail(e);\n}",
204
- "\n if (!e)\n return NULL;\n return agtail(e);\n",
205
- "}"],
206
- ["Agnode_t *nextnode(Agedge_t *e, Agnode_t *n)\n{\n if (!e || n != agtail(e))\n return NULL;\n return aghead(e);\n}",
207
- "\n if (!e || n != agtail(e))\n return NULL;\n return aghead(e);\n",
208
- "}"],
209
- ["Agsym_t *firstattr(Agraph_t *g)\n{\n if (!g)\n return NULL;\n g = agroot(g);\n return agnxtattr(g,AGRAPH,NULL);\n}",
210
- "\n if (!g)\n return NULL;\n g = agroot(g);\n return agnxtattr(g,AGRAPH,NULL);\n",
211
- "}"],
212
- ["Agsym_t *nextattr(Agraph_t *g, Agsym_t *a)\n{\n if (!g || !a)\n return NULL;\n g = agroot(g);\n return agnxtattr(g,AGRAPH,a);\n}",
213
- "\n if (!g || !a)\n return NULL;\n g = agroot(g);\n return agnxtattr(g,AGRAPH,a);\n",
214
- "}"],
215
- ["Agsym_t *firstattr(Agnode_t *n)\n{\n Agraph_t *g;\n\n if (!n)\n return NULL;\n g = agraphof(n);\n return agnxtattr(g,AGNODE,NULL);\n}",
216
- "\n Agraph_t *g;\n\n if (!n)\n return NULL;\n g = agraphof(n);\n return agnxtattr(g,AGNODE,NULL);\n",
217
- "}"],
218
- ["Agsym_t *nextattr(Agnode_t *n, Agsym_t *a)\n{\n Agraph_t *g;\n\n if (!n || !a)\n return NULL;\n g = agraphof(n);\n return agnxtattr(g,AGNODE,a);\n}",
219
- "\n Agraph_t *g;\n\n if (!n || !a)\n return NULL;\n g = agraphof(n);\n return agnxtattr(g,AGNODE,a);\n",
220
- "}"],
221
- ["Agsym_t *firstattr(Agedge_t *e)\n{\n Agraph_t *g;\n\n if (!e)\n return NULL;\n g = agraphof(agtail(e));\n return agnxtattr(g,AGEDGE,NULL);\n}",
222
- "\n Agraph_t *g;\n\n if (!e)\n return NULL;\n g = agraphof(agtail(e));\n return agnxtattr(g,AGEDGE,NULL);\n",
223
- "}"],
224
- ["Agsym_t *nextattr(Agedge_t *e, Agsym_t *a)\n{\n Agraph_t *g;\n\n if (!e || !a)\n return NULL;\n g = agraphof(agtail(e));\n return agnxtattr(g,AGEDGE,a);\n}",
225
- "\n Agraph_t *g;\n\n if (!e || !a)\n return NULL;\n g = agraphof(agtail(e));\n return agnxtattr(g,AGEDGE,a);\n",
226
- "}"],
227
- ["bool rm(Agraph_t *g)\n{\n if (!g)\n return false;\n#if 0\n Agraph_t* sg;\n for (sg = agfstsubg (g); sg; sg = agnxtsubg (sg))\n\trm(sg);\n if (g == agroot(g))\n\tagclose(g);\n else\n agdelete(agparent(g), g);\n#endif\n /* The rm function appears to have the semantics of agclose, so\n * we should just do that, and let cgraph take care of all the\n * details.\n */\n agclose(g);\n return true;\n}",
228
- "\n if (!g)\n return false;\n#if 0\n Agraph_t* sg;\n for (sg = agfstsubg (g); sg; sg = agnxtsubg (sg))\n\trm(sg);\n if (g == agroot(g))\n\tagclose(g);\n else\n agdelete(agparent(g), g);\n#endif\n /* The rm function appears to have the semantics of agclose, so\n * we should just do that, and let cgraph take care of all the\n * details.\n */\n agclose(g);\n return true;\n",
229
- "}"],
230
- ["bool rm(Agnode_t *n)\n{\n if (!n)\n return false;\n // removal of the protonode is not permitted\n if (agnameof(n)[0] == '\\001' && strcmp (agnameof(n), \"\\001proto\") ==0)\n return false;\n agdelete(agraphof(n), n);\n return true;\n}",
231
- "\n if (!n)\n return false;\n // removal of the protonode is not permitted\n if (agnameof(n)[0] == '\\001' && strcmp (agnameof(n), \"\\001proto\") ==0)\n return false;\n agdelete(agraphof(n), n);\n return true;\n",
232
- "}"],
233
- ["bool rm(Agedge_t *e)\n{\n if (!e)\n return false;\n // removal of the protoedge is not permitted\n if ((agnameof(aghead(e))[0] == '\\001' && strcmp (agnameof(aghead(e)), \"\\001proto\") == 0)\n || (agnameof(agtail(e))[0] == '\\001' && strcmp (agnameof(agtail(e)), \"\\001proto\") == 0))\n return false;\n agdelete(agroot(agraphof(aghead(e))), e);\n return true;\n}",
234
- "\n if (!e)\n return false;\n // removal of the protoedge is not permitted\n if ((agnameof(aghead(e))[0] == '\\001' && strcmp (agnameof(aghead(e)), \"\\001proto\") == 0)\n || (agnameof(agtail(e))[0] == '\\001' && strcmp (agnameof(agtail(e)), \"\\001proto\") == 0))\n return false;\n agdelete(agroot(agraphof(aghead(e))), e);\n return true;\n",
235
- "}"],
236
- ["bool layout(Agraph_t *g, const char *engine)\n{\n int err;\n\n if (!g)\n return false;\n err = gvFreeLayout(gvc, g); /* ignore errors */\n err = gvLayout(gvc, g, engine);\n return (! err);\n}",
237
- "\n int err;\n\n if (!g)\n return false;\n err = gvFreeLayout(gvc, g); /* ignore errors */\n err = gvLayout(gvc, g, engine);\n return (! err);\n",
238
- "}"],
239
- ["bool render(Agraph_t *g)\n{\n if (!g)\n return false;\n attach_attrs(g);\n return true;\n}",
240
- "\n if (!g)\n return false;\n attach_attrs(g);\n return true;\n",
241
- "}"],
242
- ["bool render(Agraph_t *g, const char *format)\n{\n int err;\n\n if (!g)\n return false;\n err = gvRender(gvc, g, format, stdout);\n return (! err);\n}",
243
- "\n int err;\n\n if (!g)\n return false;\n err = gvRender(gvc, g, format, stdout);\n return (! err);\n",
244
- "}"],
245
- ["bool render(Agraph_t *g, const char *format, FILE *f)\n{\n int err;\n\n if (!g)\n return false;\n err = gvRender(gvc, g, format, f);\n return (! err);\n}",
246
- "\n int err;\n\n if (!g)\n return false;\n err = gvRender(gvc, g, format, f);\n return (! err);\n",
247
- "}"],
248
- ["bool renderchannel(Agraph_t *g, const char *format, const char *channelname)\n{\n int err;\n\n if (!g)\n return false;\n gv_channel_writer_init(gvc);\n err = gvRender(gvc, g, format, (FILE*)channelname);\n gv_writer_reset (gvc); /* Reset to default */\n return (! err);\n}",
249
- "\n int err;\n\n if (!g)\n return false;\n gv_channel_writer_init(gvc);\n err = gvRender(gvc, g, format, (FILE*)channelname);\n gv_writer_reset (gvc); /* Reset to default */\n return (! err);\n",
250
- "}"],
251
- ["bool render(Agraph_t *g, const char *format, const char *filename)\n{\n int err;\n\n if (!g)\n return false;\n err = gvRenderFilename(gvc, g, format, filename);\n return (! err);\n}",
252
- "\n int err;\n\n if (!g)\n return false;\n err = gvRenderFilename(gvc, g, format, filename);\n return (! err);\n",
253
- "}"],
254
- ["char* renderresult(Agraph_t *g, const char *format)\n{\n BA ba;\n\n if (!g)\n return NULL;\n if (!GD_alg(g))\n return NULL;\n ba.sz = BUFSIZ;\n ba.data = (char*)malloc(ba.sz*sizeof(char)); /* must be freed by wrapper code */\n ba.len = 0;\n gv_string_writer_init(gvc);\n (void)gvRender(gvc, g, format, (FILE*)&ba);\n gv_writer_reset (gvc); /* Reset to default */\n *((int*)GD_alg(g)) = ba.len;\n return ba.data;\n}",
255
- "\n BA ba;\n\n if (!g)\n return NULL;\n if (!GD_alg(g))\n return NULL;\n ba.sz = BUFSIZ;\n ba.data = (char*)malloc(ba.sz*sizeof(char)); /* must be freed by wrapper code */\n ba.len = 0;\n gv_string_writer_init(gvc);\n (void)gvRender(gvc, g, format, (FILE*)&ba);\n gv_writer_reset (gvc); /* Reset to default */\n *((int*)GD_alg(g)) = ba.len;\n return ba.data;\n",
256
- "}"],
257
- ["void renderresult(Agraph_t *g, const char *format, char *outdata)\n{\n if (!g)\n return;\n gv_string_writer_init(gvc);\n (void)gvRender(gvc, g, format, (FILE*)outdata);\n gv_writer_reset (gvc); /* Reset to default */\n}",
258
- "\n if (!g)\n return;\n gv_string_writer_init(gvc);\n (void)gvRender(gvc, g, format, (FILE*)outdata);\n gv_writer_reset (gvc); /* Reset to default */\n",
259
- "}"],
260
- ["char* renderdata(Agraph_t *g, const char *format)\n{\n int err;\n char *data;\n unsigned int length;\n\n if (!g)\n\treturn NULL;\n err = gvRenderData(gvc, g, format, &data, &length);\n if (err)\n\treturn NULL;\n data = (char*)realloc(data, length + 1);\n return data;\n}",
261
- "\n int err;\n char *data;\n unsigned int length;\n\n if (!g)\n\treturn NULL;\n err = gvRenderData(gvc, g, format, &data, &length);\n if (err)\n\treturn NULL;\n data = (char*)realloc(data, length + 1);\n return data;\n",
262
- "}"],
263
- ["bool write(Agraph_t *g, FILE *f)\n{\n int err;\n\n if (!g)\n return false;\n err = agwrite(g, f);\n return (! err);\n}",
264
- "\n int err;\n\n if (!g)\n return false;\n err = agwrite(g, f);\n return (! err);\n",
265
- "}"],
266
- ["bool write(Agraph_t *g, const char *filename)\n{\n FILE *f;\n int err;\n\n if (!g)\n return false;\n f = fopen(filename, \"w\");\n if (!f)\n return false;\n err = agwrite(g, f);\n fclose(f);\n return (! err);\n}",
267
- "\n FILE *f;\n int err;\n\n if (!g)\n return false;\n f = fopen(filename, \"w\");\n if (!f)\n return false;\n err = agwrite(g, f);\n fclose(f);\n return (! err);\n",
268
- "}"],
269
- ["bool tred(Agraph_t *g)\n{\n int err;\n\n if (!g)\n return false;\n err = gvToolTred(g);\n return (! err);\n}",
270
- "\n int err;\n\n if (!g)\n return false;\n err = gvToolTred(g);\n return (! err);\n",
271
- "}"]]