Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Main
Synchronet
Commits
20b53534
Commit
20b53534
authored
May 11, 2004
by
rswindell
Browse files
Latest and greatest.
parent
528de785
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
89 additions
and
68 deletions
+89
-68
exec/listserver.js
exec/listserver.js
+89
-68
No files found.
exec/listserver.js
View file @
20b53534
...
...
@@ -15,7 +15,7 @@ var ini_fname = system.ctrl_dir + "listserver.ini";
ini_file
=
new
File
(
ini_fname
);
if
(
!
ini_file
.
open
(
"
r
"
))
{
log
(
LOG_ERR
,
format
(
"
!ERROR %
s
opening ini_file: %s
"
log
(
LOG_ERR
,
format
(
"
!ERROR %
d
opening ini_file: %s
"
,
ini_file
.
error
,
ini_fname
));
exit
();
}
...
...
@@ -31,29 +31,32 @@ if(!list_array.length) {
}
for
(
var
l
in
list_array
)
{
var
list
=
list_array
[
l
];
/* Set default list addresses */
if
(
!
list
_array
[
l
]
.
address
)
list
_array
[
l
]
.
address
=
format
(
"
%s@%s
"
,
list
_array
[
l
]
.
name
,
system
.
inet_addr
);
if
(
!
msg_area
.
sub
[
list
_array
[
l
]
.
sub
])
{
log
(
LOG_WARNING
,
"
!Unrecognized sub-board internal code:
"
+
list
_array
[
l
]
.
sub
);
list
_array
[
l
]
.
disabled
=
true
;
if
(
!
list
.
address
)
list
.
address
=
format
(
"
%s@%s
"
,
list
.
name
,
system
.
inet_addr
);
if
(
!
msg_area
.
sub
[
list
.
sub
])
{
log
(
LOG_WARNING
,
"
!Unrecognized sub-board internal code:
"
+
list
.
sub
);
list
.
disabled
=
true
;
continue
;
}
if
(
!
list
_array
[
l
]
.
description
)
list
_array
[
l
]
.
description
=
msg_area
.
sub
[
list
_array
[
l
]
.
sub
].
description
;
if
(
list
_array
[
l
]
.
confirm
==
undefined
)
list
_array
[
l
]
.
confirm
=
true
;
if
(
!
list
.
description
)
list
.
description
=
msg_area
.
sub
[
list
.
sub
].
description
;
if
(
list
.
confirm
==
undefined
)
list
.
confirm
=
true
;
var
msgbase
=
new
MsgBase
(
list
_array
[
l
]
.
sub
);
var
msgbase
=
new
MsgBase
(
list
.
sub
);
if
(
msgbase
.
open
()
==
false
)
{
log
(
LOG_ERR
,
format
(
"
%s !ERROR %s opening msgbase: %s
"
,
list
_array
[
l
]
.
name
,
msgbase
.
error
,
list
_array
[
l
]
.
sub
));
,
list
.
name
,
msgbase
.
error
,
list
.
sub
));
continue
;
}
list
_array
[
l
]
.
msgbase_file
=
msgbase
.
file
;
list
.
msgbase_file
=
msgbase
.
file
;
/* Create the user list file if it doesn't exist */
var
user_fname
=
list
_array
[
l
]
.
msgbase_file
+
user_list_ext
;
var
user_fname
=
list
.
msgbase_file
+
user_list_ext
;
if
(
!
file_exists
(
user_fname
))
file_touch
(
user_fname
);
}
...
...
@@ -69,14 +72,14 @@ if(this.recipient_list_filename!=undefined) {
var
error_file
=
new
File
(
processing_error_filename
);
if
(
!
error_file
.
open
(
"
w
"
))
{
log
(
LOG_ERR
,
format
(
"
!ERROR %
s
opening processing error file: %s
"
log
(
LOG_ERR
,
format
(
"
!ERROR %
d
opening processing error file: %s
"
,
error_file
.
error
,
processing_error_filename
));
exit
();
}
var
rcptlst_file
=
new
File
(
recipient_list_filename
);
if
(
!
rcptlst_file
.
open
(
"
r
"
))
{
error_file
.
writeln
(
log
(
LOG_ERR
,
format
(
"
!ERROR %
s
opening recipient list: %s
"
error_file
.
writeln
(
log
(
LOG_ERR
,
format
(
"
!ERROR %
d
opening recipient list: %s
"
,
rcptlst_file
.
error
,
recipient_list_filename
)));
exit
();
}
...
...
@@ -85,7 +88,7 @@ if(this.recipient_list_filename!=undefined) {
var
msgtxt_file
=
new
File
(
message_text_filename
);
if
(
!
msgtxt_file
.
open
(
"
r
"
))
{
error_file
.
writeln
(
log
(
LOG_ERR
,
format
(
"
!ERROR %
s
opening message text: %s
"
error_file
.
writeln
(
log
(
LOG_ERR
,
format
(
"
!ERROR %
d
opening message text: %s
"
,
msgtxt_file
.
error
,
message_text_filename
)));
exit
();
}
...
...
@@ -123,7 +126,7 @@ if(this.recipient_list_filename!=undefined) {
var
response
=
process_control_msg
(
body
);
var
resp_hdr
=
{};
resp_hdr
.
subject
=
"
Synchronet L
ist
S
erver
Results
"
;
resp_hdr
.
subject
=
l
ist
s
erver
_name
+
"
Response
"
;
resp_hdr
.
to
=
header
.
from
;
resp_hdr
.
to_net_addr
=
header
.
from_net_addr
;
resp_hdr
.
to_net_type
=
NET_INTERNET
;
...
...
@@ -147,20 +150,21 @@ if(this.recipient_list_filename!=undefined) {
for
(
r
=
0
;
r
<
rcpt_list
.
length
;
r
++
)
{
var
l
;
for
(
l
=
0
;
l
<
list_array
.
length
;
l
++
)
{
var
list
=
list_array
[
l
];
/** DEBUG
for(var p in list
_array[l]
)
log("list_array["+l+"]."+p+" = "+list
_array[l]
[p]);
for(var p in list)
log("list_array["+l+"]."+p+" = "+list[p]);
**/
if
(
rcpt_list
[
r
].
Recipient
.
toLowerCase
()
==
list
_array
[
l
]
.
address
.
toLowerCase
()
&&
!
list
_array
[
l
]
.
disabled
&&
!
list
_array
[
l
]
.
readonly
)
if
(
rcpt_list
[
r
].
Recipient
.
toLowerCase
()
==
list
.
address
.
toLowerCase
()
&&
!
list
.
disabled
&&
!
list
.
readonly
)
break
;
}
if
(
l
<
list_array
.
length
)
{
/* match found */
log
(
LOG_INFO
,
format
(
"
ListServer Contribution message from %s to %s: %s
"
,
header
.
from
,
rcpt_list
[
r
].
Recipient
,
header
.
subject
));
if
(
!
process_contribution
(
header
,
body
,
list
_array
[
l
]
))
if
(
!
process_contribution
(
header
,
body
,
list
))
break
;
}
}
...
...
@@ -175,21 +179,21 @@ for(var l in list_array) {
break
;
}
if
(
list_array
[
l
].
disabled
)
continue
;
var
list
=
list_array
[
l
];
list_name
=
list_array
[
l
].
name
;
if
(
list
.
disabled
)
continue
;
msgbase
=
new
MsgBase
(
list
_array
[
l
]
.
sub
);
msgbase
=
new
MsgBase
(
list
.
sub
);
if
(
msgbase
.
open
()
==
false
)
{
log
(
LOG_ERR
,
format
(
"
%s !ERROR %s opening msgbase: %s
"
,
list
_
name
,
msgbase
.
error
,
list
_array
[
l
]
.
sub
));
,
list
.
name
,
msgbase
.
error
,
list
.
sub
));
delete
msgbase
;
continue
;
}
/* Get subscriber list */
var
user_list
=
get_user_list
(
list
_array
[
l
]
);
var
user_list
=
get_user_list
(
list
);
if
(
!
user_list
.
length
)
{
delete
msgbase
;
continue
;
...
...
@@ -197,18 +201,18 @@ for(var l in list_array) {
/***
if(!user_list.length) {
log(LOG_NOTICE,"No subscribers to list: " + list
_
name);
log(LOG_NOTICE,"No subscribers to list: " + list
.
name);
delete msgbase;
continue;
}
***/
/* Get export message pointer */
ptr_fname
=
list
_array
[
l
]
.
msgbase_file
+
"
.list.ptr
"
;
ptr_fname
=
list
.
msgbase_file
+
"
.list.ptr
"
;
ptr_file
=
new
File
(
ptr_fname
);
if
(
!
ptr_file
.
open
(
"
w+
"
))
{
log
(
LOG_ERR
,
format
(
"
%s !ERROR %
s
opening/creating file: %s
"
,
list
_
name
,
ptr_file
.
error
,
ptr_fname
));
log
(
LOG_ERR
,
format
(
"
%s !ERROR %
d
opening/creating file: %s
"
,
list
.
name
,
ptr_file
.
error
,
ptr_fname
));
delete
msgbase
;
continue
;
}
...
...
@@ -224,25 +228,24 @@ for(var l in list_array) {
for
(;
ptr
<=
last_msg
&&
!
js
.
terminated
;
ptr
++
)
{
hdr
=
msgbase
.
get_msg_header
(
/* retrieve by offset? */
false
,
/* message number */
ptr
,
/* regenerate msg-id? */
false
/* message number */
ptr
);
if
(
hdr
==
null
)
{
/**
log(LOG_WARNING,format("%s !ERROR %s getting msg header #%lu"
,list
_
name, msgbase.error, ptr));
,list
.
name, msgbase.error, ptr));
**/
continue
;
}
if
(
hdr
.
attr
&
(
MSG_DELETE
|
MSG_PRIVATE
))
{
/* marked for deletion */
log
(
LOG_NOTICE
,
format
(
"
%s Skipping %s message #%lu from %s: %s
"
,
list
_
name
,
hdr
.
attr
&
MSG_DELETE
?
"
deleted
"
:
"
private
"
,
list
.
name
,
hdr
.
attr
&
MSG_DELETE
?
"
deleted
"
:
"
private
"
,
ptr
,
hdr
.
from
,
hdr
.
subject
));
continue
;
}
if
(
hdr
.
attr
&
MSG_MODERATED
&&
!
(
hdr
.
attr
&
MSG_VALIDATED
))
{
log
(
LOG_NOTICE
,
format
(
"
%s Stopping at unvalidated moderated message #%lu from %s: %s
"
,
list
_
name
,
ptr
,
hdr
.
from
,
hdr
.
subject
));
,
list
.
name
,
ptr
,
hdr
.
from
,
hdr
.
subject
));
ptr
--
;
break
;
}
...
...
@@ -256,7 +259,7 @@ for(var l in list_array) {
);
if
(
body
==
null
)
{
log
(
LOG_ERR
,
format
(
"
%s !ERROR %s reading text of message #%lu
"
,
list
_
name
,
msgbase
.
error
,
ptr
));
,
list
.
name
,
msgbase
.
error
,
ptr
));
continue
;
}
...
...
@@ -267,7 +270,7 @@ for(var l in list_array) {
if
(
user_list
[
u
].
disabled
||
!
user_list
[
u
].
address
)
continue
;
log
(
LOG_DEBUG
,
format
(
"
%s Enqueing message #%lu for %s <%s>
"
,
list
_
name
,
ptr
,
user_list
[
u
].
name
,
user_list
[
u
].
address
));
,
list
.
name
,
ptr
,
user_list
[
u
].
name
,
user_list
[
u
].
address
));
rcpt_list
.
push
(
{
to
:
user_list
[
u
].
name
,
to_net_addr
:
user_list
[
u
].
address
,
to_net_type
:
NET_INTERNET
...
...
@@ -278,18 +281,18 @@ for(var l in list_array) {
break
;
}
if
(
rcpt_list
.
length
<
1
)
{
log
(
LOG_NOTICE
,
format
(
"
%s No active subscriptions
"
,
list
_
name
));
log
(
LOG_NOTICE
,
format
(
"
%s No active subscriptions
"
,
list
.
name
));
continue
;
}
log
(
LOG_INFO
,
format
(
"
%s Sending message #%lu from %s to %lu recipients: %s
"
,
list
_
name
,
ptr
,
hdr
.
from
,
rcpt_list
.
length
,
hdr
.
subject
));
,
list
.
name
,
ptr
,
hdr
.
from
,
rcpt_list
.
length
,
hdr
.
subject
));
hdr
.
replyto_net_type
=
NET_INTERNET
;
hdr
.
replyto_net_addr
=
list
_array
[
l
]
.
address
;
hdr
.
replyto_net_addr
=
list
.
address
;
if
(
!
mailbase
.
save_msg
(
hdr
,
body
,
rcpt_list
))
log
(
LOG_ERR
,
format
(
"
%s !ERROR %s saving mail message
"
,
list
_
name
,
mailbase
.
error
));
,
list
.
name
,
mailbase
.
error
));
}
if
(
ptr
>
last_msg
)
...
...
@@ -311,7 +314,7 @@ function process_control_msg(cmd_list)
{
var
response
=
{
body
:
new
Array
(),
subject
:
""
};
response
.
body
.
push
(
"
Synchronet L
ist
S
erver
"
+
REVISION
+
"
Response:
\r\n
"
);
response
.
body
.
push
(
l
ist
s
erver
_name
+
"
"
+
REVISION
+
"
Response:
\r\n
"
);
for
(
var
c
in
cmd_list
)
{
var
cmd
=
cmd_list
[
c
];
...
...
@@ -321,19 +324,22 @@ function process_control_msg(cmd_list)
switch
(
token
[
0
].
toLowerCase
())
{
case
"
lists
"
:
response
.
body
.
push
(
"
List of lists:
"
);
for
(
var
l
in
list_array
)
if
(
!
list_array
[
l
].
disabled
)
response
.
body
.
push
(
"
\t
"
+
list_array
[
l
].
name
.
toUpperCase
()
+
"
\t\t
"
+
list_array
[
l
].
description
);
for
(
var
l
in
list_array
)
{
var
list
=
list_array
[
l
];
if
(
!
list
.
disabled
)
response
.
body
.
push
(
"
\t
"
+
list
.
name
.
toUpperCase
()
+
"
\t\t
"
+
list
.
description
);
}
break
;
case
"
subscribe
"
:
case
"
unsubscribe
"
:
for
(
var
l
in
list_array
)
{
if
(
list_array
[
l
].
disabled
||
list_array
[
l
].
closed
)
var
list
=
list_array
[
l
];
if
(
list
.
disabled
||
list
.
closed
)
continue
;
if
(
list
_array
[
l
]
.
name
.
toLowerCase
()
==
token
[
1
].
toLowerCase
()
||
list
_array
[
l
]
.
address
.
toLowerCase
()
==
token
[
1
].
toLowerCase
())
{
response
.
body
.
push
(
subscription_control
(
token
[
0
],
list
_array
[
l
]
,
token
[
2
]));
if
(
list
.
name
.
toLowerCase
()
==
token
[
1
].
toLowerCase
()
||
list
.
address
.
toLowerCase
()
==
token
[
1
].
toLowerCase
())
{
response
.
body
.
push
(
subscription_control
(
token
[
0
],
list
,
token
[
2
]));
return
(
response
);
}
}
...
...
@@ -357,16 +363,29 @@ function process_control_msg(cmd_list)
return
(
response
);
}
function
get
_user_list
(
list
)
function
open
_user_list
(
list
,
mode
)
{
var
user_list
=
new
Array
();
var
user_fname
=
list
.
msgbase_file
+
user_list_ext
;
var
user_file
=
new
File
(
user_fname
);
if
(
!
user_file
.
open
(
"
r
"
))
{
if
(
!
user_file
.
open
(
mode
))
{
log
(
LOG_ERR
,
format
(
"
%s !ERROR %d opening file: %s
"
,
list
.
name
,
user_file
.
error
,
user_fname
));
}
else
{
user_list
=
user_file
.
iniGetAllObjects
();
return
(
null
);
}
return
(
user_file
);
}
function
read_user_list
(
user_file
)
{
return
user_file
.
iniGetAllObjects
(
"
address
"
);
}
function
get_user_list
(
list
)
{
var
user_list
=
new
Array
();
if
((
user_file
=
open_user_list
(
"
r
"
))
!=
null
)
{
user_list
=
read_user_list
(
user_file
);
user_file
.
close
();
}
return
user_list
;
...
...
@@ -393,9 +412,10 @@ function write_user_list(user_list, user_file)
user_file
.
rewind
();
user_file
.
length
=
0
;
for
(
var
u
in
user_list
)
{
user_file
.
writeln
(
"
[
"
+
user_list
[
u
].
name
+
"
]
"
);
user_file
.
writeln
(
"
[
"
+
user_list
[
u
].
address
+
"
]
"
);
for
(
var
p
in
user_list
[
u
])
user_file
.
writeln
(
p
+
"
=
"
+
user_list
[
u
][
p
]);
if
(
p
!=
"
address
"
)
user_file
.
writeln
(
format
(
"
%-25s
"
,
p
)
+
"
=
"
+
user_list
[
u
][
p
]);
user_file
.
writeln
();
}
}
...
...
@@ -409,13 +429,10 @@ function subscription_control(cmd, list, address)
,
list
.
name
,
cmd
,
address
));
/* Get subscriber list */
var
user_fname
=
list
.
msgbase_file
+
user_list_ext
;
var
user_file
=
new
File
(
user_fname
);
if
(
!
user_file
.
open
(
"
r+
"
))
return
log
(
LOG_ERR
,
format
(
"
%s !ERROR %d opening file: %s
"
,
list
.
name
,
user_file
.
error
,
user_fname
));
if
((
user_file
=
open_user_list
(
list
,
"
r+
"
))
==
null
)
return
log
(
LOG_ERR
,
format
(
"
%s !ERROR opening subscriber list
"
,
list
.
name
));
user_list
=
user_file
.
iniGetAllObjects
(
);
user_list
=
read_user_list
(
user_file
);
switch
(
cmd
.
toLowerCase
())
{
case
"
unsubscribe
"
:
...
...
@@ -436,7 +453,7 @@ function subscription_control(cmd, list, address)
,
address
:
address
,
created
:
system
.
timestr
(
now
)
,
last_activity
:
system
.
timestr
(
now
)
,
last_activity_time
:
format
(
"
%08lx
h
"
,
now
)
,
last_activity_time
:
format
(
"
%08lx
"
,
now
)
});
write_user_list
(
user_list
,
user_file
);
return
log
(
LOG_INFO
,
format
(
"
%s %s subscription successful
"
...
...
@@ -456,6 +473,10 @@ function process_contribution(header, body, list)
if
(
find_user
(
user_list
,
sender_address
)
==-
1
)
{
error_file
.
writeln
(
log
(
LOG_WARNING
,
format
(
"
%s !ERROR %s is not a subscriber
"
,
list
.
name
,
sender_address
)));
// error_file.writeln();
// error_file.writeln("To subscribe to this list, send an e-mail to "
// + listserver_address);
// error_file.writeln("with \"subscribe " + list.name + "\" in the message body.");
return
(
false
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment