View | Details | Raw Unified | Return to bug 15253
Collapse All | Expand All

(-)a/C4/SIP/ILS.pm (-12 lines)
Lines 6-12 package C4::SIP::ILS; Link Here
6
6
7
use warnings;
7
use warnings;
8
use strict;
8
use strict;
9
use Sys::Syslog qw(syslog);
10
use Data::Dumper;
9
use Data::Dumper;
11
10
12
use C4::SIP::ILS::Item;
11
use C4::SIP::ILS::Item;
Lines 48-54 sub new { Link Here
48
    my $self = {};
47
    my $self = {};
49
    $debug and warn "new ILS: INSTITUTION: " . Dumper($institution);
48
    $debug and warn "new ILS: INSTITUTION: " . Dumper($institution);
50
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS $institution->{id}");
49
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS $institution->{id}");
51
    syslog("LOG_DEBUG", "new ILS '%s'", $institution->{id});
52
    $self->{institution} = $institution;
50
    $self->{institution} = $institution;
53
    $self->{server} = $server;
51
    $self->{server} = $server;
54
    return bless $self, $type;
52
    return bless $self, $type;
Lines 85-91 sub check_inst_id { Link Here
85
    my ($self, $id, $whence) = @_;
83
    my ($self, $id, $whence) = @_;
86
    if ($id ne $self->{institution}->{id}) {
84
    if ($id ne $self->{institution}->{id}) {
87
        $self->{server}->{logger}->warn("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: $whence: received institution '$id', expected '$self->{institution}->{id}'");
85
        $self->{server}->{logger}->warn("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: $whence: received institution '$id', expected '$self->{institution}->{id}'");
88
        syslog("LOG_WARNING", "%s: received institution '%s', expected '%s'", $whence, $id, $self->{institution}->{id});
89
        # Just an FYI check, we don't expect the user to change location from that in SIPconfig.xml
86
        # Just an FYI check, we don't expect the user to change location from that in SIPconfig.xml
90
    }
87
    }
91
}
88
}
Lines 166-177 sub checkout { Link Here
166
			$circ->desensitize(!$item->magnetic_media);
163
			$circ->desensitize(!$item->magnetic_media);
167
164
168
      $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::Checkout: patron $patron_id has checked out " . join(', ', @{$patron->{items}}) );
165
      $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::Checkout: patron $patron_id has checked out " . join(', ', @{$patron->{items}}) );
169
			syslog("LOG_DEBUG", "ILS::Checkout: patron %s has checked out %s",
170
				$patron_id, join(', ', @{$patron->{items}}));
171
		}
166
		}
172
		else {
167
		else {
173
        $self->{server}->{logger}->error("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::Checkout Issue failed");
168
        $self->{server}->{logger}->error("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::Checkout Issue failed");
174
			syslog("LOG_ERR", "ILS::Checkout Issue failed");
175
		}
169
		}
176
    }
170
    }
177
    # END TRANSACTION
171
    # END TRANSACTION
Lines 201-212 sub checkin { Link Here
201
    # or it was not checked out but the checked_in_ok flag was set
195
    # or it was not checked out but the checked_in_ok flag was set
202
    $circ->ok( ( $checked_in_ok && $item ) || ( $item && $item->{patron} ) );
196
    $circ->ok( ( $checked_in_ok && $item ) || ( $item && $item->{patron} ) );
203
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: C4::SIP::ILS::checkin - using checked_in_ok") if $checked_in_ok;
197
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: C4::SIP::ILS::checkin - using checked_in_ok") if $checked_in_ok;
204
    syslog("LOG_DEBUG", "C4::SIP::ILS::checkin - using checked_in_ok") if $checked_in_ok;
205
198
206
    if ( !defined( $item->{patron} ) ) {
199
    if ( !defined( $item->{patron} ) ) {
207
        $circ->screen_msg("Item not checked out") unless $checked_in_ok;
200
        $circ->screen_msg("Item not checked out") unless $checked_in_ok;
208
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: C4::SIP::ILS::checkin - item not checked out");
201
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: C4::SIP::ILS::checkin - item not checked out");
209
        syslog("LOG_DEBUG", "C4::SIP::ILS::checkin - item not checked out");
210
    }
202
    }
211
    else {
203
    else {
212
        if ( $circ->ok ) {
204
        if ( $circ->ok ) {
Lines 434-447 sub renew { Link Here
434
		foreach my $i (@{$patron->{items}}) {
426
		foreach my $i (@{$patron->{items}}) {
435
            unless (defined $i->{barcode}) {    # FIXME: using data instead of objects may violate the abstraction layer
427
            unless (defined $i->{barcode}) {    # FIXME: using data instead of objects may violate the abstraction layer
436
                $self->{server}->{logger}->error("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: No barcode for item " . $j+1 . " of $count: $item_id");
428
                $self->{server}->{logger}->error("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: No barcode for item " . $j+1 . " of $count: $item_id");
437
                syslog("LOG_ERR", "No barcode for item %s of %s: $item_id", $j+1, $count);
438
                next;
429
                next;
439
            }
430
            }
440
            $self->{server}->{logger}->debug( "$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: "
431
            $self->{server}->{logger}->debug( "$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: "
441
                  . "checking item "
432
                  . "checking item "
442
                  . $j + 1
433
                  . $j + 1
443
                  . " of $count: $item_id vs. $i->{barcode} " );
434
                  . " of $count: $item_id vs. $i->{barcode} " );
444
            syslog("LOG_DEBUG", "checking item %s of %s: $item_id vs. %s", ++$j, $count, $i->{barcode});
445
            if ($i->{barcode} eq $item_id) {
435
            if ($i->{barcode} eq $item_id) {
446
				# We have it checked out
436
				# We have it checked out
447
                $item = C4::SIP::ILS::Item->new( $item_id, $self->{server} );
437
                $item = C4::SIP::ILS::Item->new( $item_id, $self->{server} );
Lines 476-485 sub renew_all { Link Here
476
    $trans->patron( $patron = C4::SIP::ILS::Patron->new( $patron_id, $self->{server} ) );
466
    $trans->patron( $patron = C4::SIP::ILS::Patron->new( $patron_id, $self->{server} ) );
477
    if (defined $patron) {
467
    if (defined $patron) {
478
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::renew_all: patron '$patron->name': renew_ok: $patron->renew_ok");
468
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::renew_all: patron '$patron->name': renew_ok: $patron->renew_ok");
479
        syslog("LOG_DEBUG", "ILS::renew_all: patron '%s': renew_ok: %s", $patron->name, $patron->renew_ok);
480
    } else {
469
    } else {
481
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::renew_all: Invalid patron id: '$patron_id'");
470
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::renew_all: Invalid patron id: '$patron_id'");
482
        syslog("LOG_DEBUG", "ILS::renew_all: Invalid patron id: '%s'", $patron_id);
483
    }
471
    }
484
472
485
    if (!defined($patron)) {
473
    if (!defined($patron)) {
(-)a/C4/SIP/ILS/Item.pm (-5 lines)
Lines 9-15 package C4::SIP::ILS::Item; Link Here
9
use strict;
9
use strict;
10
use warnings;
10
use warnings;
11
11
12
use Sys::Syslog qw(syslog);
13
use Carp;
12
use Carp;
14
13
15
use C4::SIP::ILS::Transaction;
14
use C4::SIP::ILS::Transaction;
Lines 80-86 sub new { Link Here
80
	my $item = GetBiblioFromItemNumber($itemnumber);    # actually biblio.*, biblioitems.* AND items.*  (overkill)
79
	my $item = GetBiblioFromItemNumber($itemnumber);    # actually biblio.*, biblioitems.* AND items.*  (overkill)
81
	if (! $item) {
80
	if (! $item) {
82
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS::Item('$item_id'): not found");
81
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS::Item('$item_id'): not found");
83
		syslog("LOG_DEBUG", "new ILS::Item('%s'): not found", $item_id);
84
		warn "new ILS::Item($item_id) : No item '$item_id'.";
82
		warn "new ILS::Item($item_id) : No item '$item_id'.";
85
        return;
83
        return;
86
	}
84
	}
Lines 110-117 sub new { Link Here
110
	bless $self, $type;
108
	bless $self, $type;
111
109
112
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS::Item('$item_id'): found with title '$self->{title}'");
110
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS::Item('$item_id'): found with title '$self->{title}'");
113
    syslog("LOG_DEBUG", "new ILS::Item('%s'): found with title '%s'",
114
	   $item_id, $self->{title});
115
111
116
    return $self;
112
    return $self;
117
}
113
}
Lines 174-180 sub hold_patron_name { Link Here
174
    my $holder = GetMember(borrowernumber=>$borrowernumber);
170
    my $holder = GetMember(borrowernumber=>$borrowernumber);
175
    unless ($holder) {
171
    unless ($holder) {
176
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: While checking hold, GetMember failed for borrowernumber '$borrowernumber'");
172
        $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: While checking hold, GetMember failed for borrowernumber '$borrowernumber'");
177
        syslog("LOG_ERR", "While checking hold, GetMember failed for borrowernumber '$borrowernumber'");
178
        return;
173
        return;
179
    }
174
    }
180
    my $email = $holder->{email} || '';
175
    my $email = $holder->{email} || '';
(-)a/C4/SIP/ILS/Patron.pm (-6 lines)
Lines 12-18 use warnings; Link Here
12
use Exporter;
12
use Exporter;
13
use Carp;
13
use Carp;
14
14
15
use Sys::Syslog qw(syslog);
16
use Data::Dumper;
15
use Data::Dumper;
17
16
18
use C4::Debug;
17
use C4::Debug;
Lines 37-43 sub new { Link Here
37
    $debug and warn "new Patron (GetMember): " . Dumper($kp);
36
    $debug and warn "new Patron (GetMember): " . Dumper($kp);
38
    unless (defined $kp) {
37
    unless (defined $kp) {
39
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS::Patron($patron_id): no such patron");
38
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: new ILS::Patron($patron_id): no such patron");
40
        syslog("LOG_DEBUG", "new ILS::Patron(%s): no such patron", $patron_id);
41
        return;
39
        return;
42
    }
40
    }
43
    $kp = GetMemberDetails($kp->{borrowernumber});
41
    $kp = GetMemberDetails($kp->{borrowernumber});
Lines 126-132 sub new { Link Here
126
    $self->{server} = $server;
124
    $self->{server} = $server;
127
    $debug and warn Dumper($self);
125
    $debug and warn Dumper($self);
128
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: new ILS::Patron($patron_id): found patron '$self->{id}'");
126
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: new ILS::Patron($patron_id): found patron '$self->{id}'");
129
    syslog("LOG_DEBUG", "new ILS::Patron(%s): found patron '%s'", $patron_id,$self->{id});
130
    bless $self, $type;
127
    bless $self, $type;
131
    return $self;
128
    return $self;
132
}
129
}
Lines 329-337 sub enable { Link Here
329
    $self->{server}->{logger}->debug( "$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: "
326
    $self->{server}->{logger}->debug( "$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: "
330
          . "Patron($self->{id})->enable: charge: $self->{charge_ok}, "
327
          . "Patron($self->{id})->enable: charge: $self->{charge_ok}, "
331
          . "renew:$self->{renew_ok}, recall:$self->{recall_ok}, hold:$self->{hold_ok}" );
328
          . "renew:$self->{renew_ok}, recall:$self->{recall_ok}, hold:$self->{hold_ok}" );
332
    syslog("LOG_DEBUG", "Patron(%s)->enable: charge: %s, renew:%s, recall:%s, hold:%s",
333
       $self->{id}, $self->{charge_ok}, $self->{renew_ok},
334
       $self->{recall_ok}, $self->{hold_ok});
335
    $self->{screen_msg} = "Enable feature not implemented."; # "All privileges restored.";   # TODO: not really affecting patron record
329
    $self->{screen_msg} = "Enable feature not implemented."; # "All privileges restored.";   # TODO: not really affecting patron record
336
    return $self;
330
    return $self;
337
}
331
}
(-)a/C4/SIP/ILS/Transaction/Checkout.pm (-2 lines)
Lines 8-14 use warnings; Link Here
8
use strict;
8
use strict;
9
9
10
use POSIX qw(strftime);
10
use POSIX qw(strftime);
11
use Sys::Syslog qw(syslog);
12
use Data::Dumper;
11
use Data::Dumper;
13
use CGI qw ( -utf8 );
12
use CGI qw ( -utf8 );
14
13
Lines 50-56 sub new { Link Here
50
sub do_checkout {
49
sub do_checkout {
51
	my $self = shift;
50
	my $self = shift;
52
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::Transaction::Checkout performing checkout...");
51
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: ILS::Transaction::Checkout performing checkout...");
53
	syslog('LOG_DEBUG', "ILS::Transaction::Checkout performing checkout...");
54
	my $pending        = $self->{item}->pending_queue;
52
	my $pending        = $self->{item}->pending_queue;
55
	my $shelf          = $self->{item}->hold_shelf;
53
	my $shelf          = $self->{item}->hold_shelf;
56
	my $barcode        = $self->{item}->id;
54
	my $barcode        = $self->{item}->id;
(-)a/C4/SIP/ILS/Transaction/RenewAll.pm (-7 lines)
Lines 6-12 package C4::SIP::ILS::Transaction::RenewAll; Link Here
6
use strict;
6
use strict;
7
use warnings;
7
use warnings;
8
8
9
use Sys::Syslog qw(syslog);
10
use C4::SIP::ILS::Item;
9
use C4::SIP::ILS::Item;
11
10
12
use C4::Members qw( GetMember );
11
use C4::Members qw( GetMember );
Lines 45-56 sub do_renew_all { Link Here
45
        my $item    = C4::SIP::ILS::Item->new($item_id);
44
        my $item    = C4::SIP::ILS::Item->new($item_id);
46
        if ( !defined($item) ) {
45
        if ( !defined($item) ) {
47
            $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: renew_all: Invalid item id '$item_id' associated with patron '$patron->id'");
46
            $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$self->{server}->{account}->{id}: renew_all: Invalid item id '$item_id' associated with patron '$patron->id'");
48
            syslog(
49
                'LOG_WARNING',
50
                q|renew_all: Invalid item id '%s' associated with patron '%s'|,
51
                $item_id,
52
                $patron->id
53
            );
54
47
55
            # $all_ok = 0; Do net set as still ok
48
            # $all_ok = 0; Do net set as still ok
56
            push @{ $self->unrenewed }, $item_id;
49
            push @{ $self->unrenewed }, $item_id;
(-)a/C4/SIP/README (-3 / +6 lines)
Lines 14-24 perl modules to run: Link Here
14
14
15
LOGGING
15
LOGGING
16
16
17
SIPServer uses syslog() for status and debugging messages.  All
17
By default, SIPServer uses syslog via log4perl for status and debugging messages.
18
syslog messages are logged using the syslog facility 'local6'.
18
All syslog messages are logged using the syslog facility 'local6'.
19
If you need to change this, because something else on your system
19
If you need to change this, because something else on your system
20
is already using that facililty, just change the definition of
20
is already using that facililty, just change the definition of
21
'LOG_SIP' at the top of the file SIPServer.pm
21
'ident' and/or 'facility' in the SIP section of file log4perl.conf.
22
22
23
Make sure to update your syslog configuration to capture facility
23
Make sure to update your syslog configuration to capture facility
24
'local6' and record it.
24
'local6' and record it.
25
26
See the log4perl documenation for logging to a file or other services.
27
(-)a/C4/SIP/SIPServer.pm (-25 lines)
Lines 5-11 use strict; Link Here
5
use warnings;
5
use warnings;
6
use FindBin qw($Bin);
6
use FindBin qw($Bin);
7
use lib "$Bin";
7
use lib "$Bin";
8
use Sys::Syslog qw(syslog);
9
use Net::Server::PreFork;
8
use Net::Server::PreFork;
10
use IO::Socket::INET;
9
use IO::Socket::INET;
11
use Socket qw(:DEFAULT :crlf);
10
use Socket qw(:DEFAULT :crlf);
Lines 112-118 sub process_request { Link Here
112
111
113
    if (!defined($self->{service})) {
112
    if (!defined($self->{service})) {
114
                $self->{logger}->error("$self->{server}->{peeraddr}: process_request: Unknown recognized server connection: $sockaddr:$port/$proto");
113
                $self->{logger}->error("$self->{server}->{peeraddr}: process_request: Unknown recognized server connection: $sockaddr:$port/$proto");
115
		syslog("LOG_ERR", "process_request: Unknown recognized server connection: %s:%s/%s", $sockaddr, $port, $proto);
116
		die "process_request: Bad server connection";
114
		die "process_request: Bad server connection";
117
    }
115
    }
118
116
Lines 120-126 sub process_request { Link Here
120
118
121
    if (!defined($transport)) {
119
    if (!defined($transport)) {
122
        $self->{logger}->warn("$self->{server}->{peeraddr}: Unknown transport '$service->{transport}', dropping");
120
        $self->{logger}->warn("$self->{server}->{peeraddr}: Unknown transport '$service->{transport}', dropping");
123
		syslog("LOG_WARNING", "Unknown transport '%s', dropping", $service->{transport});
124
		return;
121
		return;
125
    } else {
122
    } else {
126
		&$transport($self);
123
		&$transport($self);
Lines 140-153 sub raw_transport { Link Here
140
    local $SIG{ALRM} = sub { die "raw_transport Timed Out!\n"; };
137
    local $SIG{ALRM} = sub { die "raw_transport Timed Out!\n"; };
141
138
142
    $self->{logger}->debug("$self->{server}->{peeraddr}: raw_transport: timeout is $service->{timeout}");
139
    $self->{logger}->debug("$self->{server}->{peeraddr}: raw_transport: timeout is $service->{timeout}");
143
    syslog("LOG_DEBUG", "raw_transport: timeout is %d", $service->{timeout});
144
140
145
    $C4::SIP::Sip::server = $self;
141
    $C4::SIP::Sip::server = $self;
146
    $input = read_SIP_packet(*STDIN);
142
    $input = read_SIP_packet(*STDIN);
147
    if (!$input) {
143
    if (!$input) {
148
        # EOF on the socket
144
        # EOF on the socket
149
        $self->{logger}->info("$self->{server}->{peeraddr}: raw_transport: shutting down: EOF during login");
145
        $self->{logger}->info("$self->{server}->{peeraddr}: raw_transport: shutting down: EOF during login");
150
        syslog("LOG_INFO", "raw_transport: shutting down: EOF during login");
151
        return;
146
        return;
152
    }
147
    }
153
    $input =~ s/[\r\n]+$//sm;	# Strip off trailing line terminator(s)
148
    $input =~ s/[\r\n]+$//sm;	# Strip off trailing line terminator(s)
Lines 156-167 sub raw_transport { Link Here
156
151
157
    $self->{logger} = Koha::Logger->get( { interface => 'sip', category => $self->{account}->{id} } ); # Add id to namespace
152
    $self->{logger} = Koha::Logger->get( { interface => 'sip', category => $self->{account}->{id} } ); # Add id to namespace
158
    $self->{logger}->debug("$self->{server}->{peeraddr}:$self->{account}->{id}: raw_transport: uname/inst: '$self->{account}->{id}/$self->{account}->{institution}'");
153
    $self->{logger}->debug("$self->{server}->{peeraddr}:$self->{account}->{id}: raw_transport: uname/inst: '$self->{account}->{id}/$self->{account}->{institution}'");
159
    syslog("LOG_DEBUG", "raw_transport: uname/inst: '%s/%s'", $self->{account}->{id}, $self->{account}->{institution});
160
154
161
    $self->sip_protocol_loop();
155
    $self->sip_protocol_loop();
162
156
163
    $self->{logger}->info("$self->{server}->{peeraddr}:$self->{account}->{id}: raw_transport: shutting down");
157
    $self->{logger}->info("$self->{server}->{peeraddr}:$self->{account}->{id}: raw_transport: shutting down");
164
    syslog("LOG_INFO", "raw_transport: shutting down");
165
}
158
}
166
159
167
sub get_clean_string {
160
sub get_clean_string {
Lines 169-186 sub get_clean_string { Link Here
169
    my $string = shift;
162
    my $string = shift;
170
    if ( defined $string ) {
163
    if ( defined $string ) {
171
        $self->{logger}->debug( "$self->{server}->{peeraddr}: get_clean_string  pre-clean(length " . length($string) . "): $string" );
164
        $self->{logger}->debug( "$self->{server}->{peeraddr}: get_clean_string  pre-clean(length " . length($string) . "): $string" );
172
        syslog( "LOG_DEBUG", "get_clean_string  pre-clean(length %s): %s", length($string), $string );
173
165
174
        chomp($string);
166
        chomp($string);
175
        $string =~ s/^[^A-z0-9]+//;
167
        $string =~ s/^[^A-z0-9]+//;
176
        $string =~ s/[^A-z0-9]+$//;
168
        $string =~ s/[^A-z0-9]+$//;
177
169
178
        $self->{logger}->debug( "$self->{server}->{peeraddr}: get_clean_string post-clean(length " . length($string) . "): $string)" );
170
        $self->{logger}->debug( "$self->{server}->{peeraddr}: get_clean_string post-clean(length " . length($string) . "): $string)" );
179
        syslog( "LOG_DEBUG", "get_clean_string post-clean(length %s): %s", length($string), $string );
180
    }
171
    }
181
    else {
172
    else {
182
        $self->{logger}->info("$self->{server}->{peeraddr}: get_clean_string called on undefined");
173
        $self->{logger}->info("$self->{server}->{peeraddr}: get_clean_string called on undefined");
183
        syslog( "LOG_INFO", "get_clean_string called on undefined" );
184
    }
174
    }
185
    return $string;
175
    return $string;
186
}
176
}
Lines 191-200 sub get_clean_input { Link Here
191
    my $in = <STDIN>;
181
    my $in = <STDIN>;
192
    $in = get_clean_string($in);
182
    $in = get_clean_string($in);
193
183
194
    while ( my $extra = <STDIN> ) {
195
        syslog( "LOG_ERR", "get_clean_input got extra lines: %s", $extra );
196
    }
197
198
    return $in;
184
    return $in;
199
}
185
}
200
186
Lines 208-214 sub telnet_transport { Link Here
208
    my $timeout = $self->{service}->{timeout} || $config->{timeout} || 30;
194
    my $timeout = $self->{service}->{timeout} || $config->{timeout} || 30;
209
195
210
    $self->{logger}->debug("$self->{server}->{peeraddr}: telnet_transport: timeout is $timeout");
196
    $self->{logger}->debug("$self->{server}->{peeraddr}: telnet_transport: timeout is $timeout");
211
    syslog("LOG_DEBUG", "telnet_transport: timeout is %s", $timeout);
212
197
213
    eval {
198
    eval {
214
	local $SIG{ALRM} = sub { die "telnet_transport: Timed Out ($timeout seconds)!\n"; };
199
	local $SIG{ALRM} = sub { die "telnet_transport: Timed Out ($timeout seconds)!\n"; };
Lines 228-238 sub telnet_transport { Link Here
228
		alarm 0;
213
		alarm 0;
229
214
230
        $self->{logger}->debug( "$self->{server}->{peeraddr}: telnet_transport 1: uid length " . length($uid) . ", pwd length " . length($pwd) );
215
        $self->{logger}->debug( "$self->{server}->{peeraddr}: telnet_transport 1: uid length " . length($uid) . ", pwd length " . length($pwd) );
231
        syslog( "LOG_DEBUG", "telnet_transport 1: uid length %s, pwd length %s", length($uid), length($pwd) );
232
        $uid = $self->get_clean_string($uid);
216
        $uid = $self->get_clean_string($uid);
233
        $pwd = $self->get_clean_string($pwd);
217
        $pwd = $self->get_clean_string($pwd);
234
        $self->{logger}->debug( "$self->{server}->{peeraddr}: telnet_transport 2: uid length " . length($uid) . ", pwd length " . length($pwd) );
218
        $self->{logger}->debug( "$self->{server}->{peeraddr}: telnet_transport 2: uid length " . length($uid) . ", pwd length " . length($pwd) );
235
        syslog( "LOG_DEBUG", "telnet_transport 2: uid length %s, pwd length %s", length($uid), length($pwd) );
236
219
237
	    if (exists ($config->{accounts}->{$uid})
220
	    if (exists ($config->{accounts}->{$uid})
238
		&& ($pwd eq $config->{accounts}->{$uid}->{password})) {
221
		&& ($pwd eq $config->{accounts}->{$uid}->{password})) {
Lines 242-260 sub telnet_transport { Link Here
242
            }
225
            }
243
	    }
226
	    }
244
        $self->{logger}->warn("$self->{server}->{peeraddr}: Invalid login attempt: ' . ($uid||'')  . '");
227
        $self->{logger}->warn("$self->{server}->{peeraddr}: Invalid login attempt: ' . ($uid||'')  . '");
245
		syslog("LOG_WARNING", "Invalid login attempt: '%s'", ($uid||''));
246
		print("Invalid login$CRLF");
228
		print("Invalid login$CRLF");
247
	}
229
	}
248
    }; # End of eval
230
    }; # End of eval
249
231
250
    if ($@) {
232
    if ($@) {
251
        $self->{logger}->error("$self->{server}->{peeraddr}: telnet_transport: Login timed out");
233
        $self->{logger}->error("$self->{server}->{peeraddr}: telnet_transport: Login timed out");
252
        syslog( "LOG_ERR", "telnet_transport: Login timed out" );
253
        die "Telnet Login Timed out";
234
        die "Telnet Login Timed out";
254
    }
235
    }
255
    elsif ( !defined($account) ) {
236
    elsif ( !defined($account) ) {
256
        $self->{logger}->error("$self->{server}->{peeraddr}: telnet_transport: Login Failed");
237
        $self->{logger}->error("$self->{server}->{peeraddr}: telnet_transport: Login Failed");
257
        syslog( "LOG_ERR", "telnet_transport: Login Failed" );
258
        die "Login Failure";
238
        die "Login Failure";
259
    }
239
    }
260
    else {
240
    else {
Lines 264-273 sub telnet_transport { Link Here
264
    $self->{account} = $account;
244
    $self->{account} = $account;
265
    $self->{logger} = Koha::Logger->get( { interface => 'sip', category => $self->{account}->{id} } ); # Add id to namespace
245
    $self->{logger} = Koha::Logger->get( { interface => 'sip', category => $self->{account}->{id} } ); # Add id to namespace
266
    $self->{logger}->debug("$self->{server}->{peeraddr}:$self->{account}->{id}: telnet_transport: uname/inst: '$account->{id}/$account->{institution}'");
246
    $self->{logger}->debug("$self->{server}->{peeraddr}:$self->{account}->{id}: telnet_transport: uname/inst: '$account->{id}/$account->{institution}'");
267
    syslog("LOG_DEBUG", "telnet_transport: uname/inst: '%s/%s'", $account->{id}, $account->{institution});
268
    $self->sip_protocol_loop();
247
    $self->sip_protocol_loop();
269
    $self->{logger}->info("$self->{server}->{peeraddr}:$self->{account}->{id}: telnet_transport: shutting down");
248
    $self->{logger}->info("$self->{server}->{peeraddr}:$self->{account}->{id}: telnet_transport: shutting down");
270
    syslog("LOG_INFO", "telnet_transport: shutting down");
271
}
249
}
272
250
273
#
251
#
Lines 311-317 sub sip_protocol_loop { Link Here
311
		while (chomp($input)) {warn "Extra line ending on input";}
289
		while (chomp($input)) {warn "Extra line ending on input";}
312
		unless ($input) {
290
		unless ($input) {
313
            $self->{logger}->error("$self->{server}->{peeraddr}:$self->{account}->{id}: sip_protocol_loop: empty input skipped");
291
            $self->{logger}->error("$self->{server}->{peeraddr}:$self->{account}->{id}: sip_protocol_loop: empty input skipped");
314
            syslog("LOG_ERR", "sip_protocol_loop: empty input skipped");
315
            print("96$CR");
292
            print("96$CR");
316
            next;
293
            next;
317
		}
294
		}
Lines 319-331 sub sip_protocol_loop { Link Here
319
		my $status = handle($input, $self, $expect);
296
		my $status = handle($input, $self, $expect);
320
        if ( !$status ) {
297
        if ( !$status ) {
321
            $self->{logger}->error( "$self->{server}->{peeraddr}:$self->{account}->{id}: sip_protocol_loop: failed to handle " . substr( $input, 0, 2 ) );
298
            $self->{logger}->error( "$self->{server}->{peeraddr}:$self->{account}->{id}: sip_protocol_loop: failed to handle " . substr( $input, 0, 2 ) );
322
            syslog( "LOG_ERR", "sip_protocol_loop: failed to handle %s", substr( $input, 0, 2 ) );
323
        }
299
        }
324
		next if $status eq REQUEST_ACS_RESEND;
300
		next if $status eq REQUEST_ACS_RESEND;
325
        if ( $expect && ( $status ne $expect ) ) {
301
        if ( $expect && ( $status ne $expect ) ) {
326
            # We received a non-"RESEND" that wasn't what we were expecting.
302
            # We received a non-"RESEND" that wasn't what we were expecting.
327
            $self->{logger}->error("$self->{server}->{peeraddr}:$self->{account}->{id}: sip_protocol_loop: expected $expect, received $input, exiting");
303
            $self->{logger}->error("$self->{server}->{peeraddr}:$self->{account}->{id}: sip_protocol_loop: expected $expect, received $input, exiting");
328
            syslog( "LOG_ERR", "sip_protocol_loop: expected %s, received %s, exiting", $expect, $input );
329
        }
304
        }
330
		# We successfully received and processed what we were expecting
305
		# We successfully received and processed what we were expecting
331
		$expect = '';
306
		$expect = '';
(-)a/C4/SIP/Sip.pm (-15 / +2 lines)
Lines 8-14 use strict; Link Here
8
use warnings;
8
use warnings;
9
use Exporter;
9
use Exporter;
10
use Encode;
10
use Encode;
11
use Sys::Syslog qw(syslog);
12
use POSIX qw(strftime);
11
use POSIX qw(strftime);
13
use Socket qw(:crlf);
12
use Socket qw(:crlf);
14
use IO::Handle;
13
use IO::Handle;
Lines 71-78 sub add_field { Link Here
71
70
72
    if (!defined($value)) {
71
    if (!defined($value)) {
73
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: add_field: Undefined value being added to '$field_id'");
72
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: add_field: Undefined value being added to '$field_id'");
74
        syslog("LOG_DEBUG", "add_field: Undefined value being added to '%s'",
75
               $field_id);
76
		$value = '';
73
		$value = '';
77
    }
74
    }
78
    $value=~s/\r/ /g; # CR terminates a sip message
75
    $value=~s/\r/ /g; # CR terminates a sip message
Lines 125-135 sub add_count { Link Here
125
    }
122
    }
126
123
127
    $count = sprintf("%04d", $count);
124
    $count = sprintf("%04d", $count);
128
    if (length($count) != 4) {
125
    if ( length($count) != 4 ) {
129
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_patron_info: $label wrong size: '$count'");
126
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_patron_info: $label wrong size: '$count'");
130
		syslog("LOG_WARNING", "handle_patron_info: %s wrong size: '%s'",
127
        $count = ' ' x 4;
131
	       $label, $count);
132
		$count = ' ' x 4;
133
    }
128
    }
134
    return $count;
129
    return $count;
135
}
130
}
Lines 170-176 sub read_SIP_packet { Link Here
170
    my $fh;
165
    my $fh;
171
    unless ( $fh = shift ) {
166
    unless ( $fh = shift ) {
172
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet: no filehandle argument!");
167
        $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet: no filehandle argument!");
173
        syslog("LOG_ERR", "read_SIP_packet: no filehandle argument!");
174
    }
168
    }
175
    my $len1 = 999;
169
    my $len1 = 999;
176
170
Lines 183-189 sub read_SIP_packet { Link Here
183
                while ( chomp($record) ) { 1; }
177
                while ( chomp($record) ) { 1; }
184
                $len1 = length($record);
178
                $len1 = length($record);
185
                $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet, INPUT MSG: '$record'");
179
                $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet, INPUT MSG: '$record'");
186
                syslog( "LOG_DEBUG", "read_SIP_packet, INPUT MSG: '$record'" );
187
                $record =~ s/^\s*[^A-z0-9]+//s; # Every line must start with a "real" character.  Not whitespace, control chars, etc. 
180
                $record =~ s/^\s*[^A-z0-9]+//s; # Every line must start with a "real" character.  Not whitespace, control chars, etc. 
188
                $record =~ s/[^A-z0-9]+$//s;    # Same for the end.  Note this catches the problem some clients have sending empty fields at the end, like |||
181
                $record =~ s/[^A-z0-9]+$//s;    # Same for the end.  Note this catches the problem some clients have sending empty fields at the end, like |||
189
                $record =~ s/\015?\012//g;      # Extra line breaks must die
182
                $record =~ s/\015?\012//g;      # Extra line breaks must die
Lines 198-215 sub read_SIP_packet { Link Here
198
        my $len2 = length($record);
191
        my $len2 = length($record);
199
        if ( $record ) {
192
        if ( $record ) {
200
            $server->{logger}->info("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet, INPUT MSG: '$record'");
193
            $server->{logger}->info("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet, INPUT MSG: '$record'");
201
            syslog("LOG_INFO", "read_SIP_packet, INPUT MSG: '$record'");
202
        }
194
        }
203
        if ($len1 != $len2) {
195
        if ($len1 != $len2) {
204
            $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet, trimmed " . $len1-$len2 . " character(s) (after chomps).");
196
            $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: read_SIP_packet, trimmed " . $len1-$len2 . " character(s) (after chomps).");
205
            syslog("LOG_DEBUG", "read_SIP_packet, trimmed %s character(s) (after chomps).", $len1-$len2);
206
        }
197
        }
207
    } else {
198
    } else {
208
        $server->{logger}->debug( "$server->{server}->{peeraddr}:$server->{account}->{id}: "
199
        $server->{logger}->debug( "$server->{server}->{peeraddr}:$server->{account}->{id}: "
209
              . "read_SIP_packet input "
200
              . "read_SIP_packet input "
210
              . ( defined($record) ? "empty ($record)" : 'undefined' )
201
              . ( defined($record) ? "empty ($record)" : 'undefined' )
211
              . ", end of input." );
202
              . ", end of input." );
212
        syslog("LOG_WARNING", "read_SIP_packet input %s, end of input.", (defined($record) ? "empty ($record)" : 'undefined'));
213
    }
203
    }
214
    #
204
    #
215
    # Cen-Tec self-check terminals transmit '\r\n' line terminators.
205
    # Cen-Tec self-check terminals transmit '\r\n' line terminators.
Lines 223-232 sub read_SIP_packet { Link Here
223
    # on the input.
213
    # on the input.
224
    #  
214
    #  
225
    # This is now handled by the vigorous cleansing above.
215
    # This is now handled by the vigorous cleansing above.
226
    # syslog("LOG_INFO", encode_utf8("INPUT MSG: '$record'")) if $record;
227
    if ( $record ) {
216
    if ( $record ) {
228
        $server->{logger}->debug( "$server->{server}->{peeraddr}:$server->{account}->{id}: INPUT MSG: '$record'" );
217
        $server->{logger}->debug( "$server->{server}->{peeraddr}:$server->{account}->{id}: INPUT MSG: '$record'" );
229
        syslog("LOG_INFO", "INPUT MSG: '$record'");
230
    }
218
    }
231
    return $record;
219
    return $record;
232
}
220
}
Lines 270-276 sub write_msg { Link Here
270
        STDOUT->autoflush(1);
258
        STDOUT->autoflush(1);
271
        print $msg, $terminator;
259
        print $msg, $terminator;
272
        $server->{logger}->info( "$server->{server}->{peeraddr}:$server->{account}->{id}: OUTPUT MSG: '$msg'");
260
        $server->{logger}->info( "$server->{server}->{peeraddr}:$server->{account}->{id}: OUTPUT MSG: '$msg'");
273
        syslog("LOG_INFO", "OUTPUT MSG: '$msg'");
274
    }
261
    }
275
262
276
    $last_response = $msg;
263
    $last_response = $msg;
(-)a/C4/SIP/Sip/Configuration.pm (-2 lines)
Lines 65-72 sub find_service { Link Here
65
    foreach my $addr ( '', '*:', "$sockaddr:", "[$sockaddr]:" ) {
65
    foreach my $addr ( '', '*:', "$sockaddr:", "[$sockaddr]:" ) {
66
        $portstr = sprintf( "%s%s/%s", $addr, $port, lc $proto );
66
        $portstr = sprintf( "%s%s/%s", $addr, $port, lc $proto );
67
        $logger->debug("Configuration::find_service: Trying $portstr");
67
        $logger->debug("Configuration::find_service: Trying $portstr");
68
        Sys::Syslog::syslog( "LOG_DEBUG",
69
            "Configuration::find_service: Trying $portstr" );
70
        last if ( exists( ( $self->{listeners} )->{$portstr} ) );
68
        last if ( exists( ( $self->{listeners} )->{$portstr} ) );
71
    }
69
    }
72
    return $self->{listeners}->{$portstr};
70
    return $self->{listeners}->{$portstr};
(-)a/C4/SIP/Sip/MsgType.pm (-58 lines)
Lines 9-15 package C4::SIP::Sip::MsgType; Link Here
9
use strict;
9
use strict;
10
use warnings;
10
use warnings;
11
use Exporter;
11
use Exporter;
12
use Sys::Syslog qw(syslog);
13
12
14
use C4::SIP::Sip qw(:all);
13
use C4::SIP::Sip qw(:all);
15
use C4::SIP::Sip::Constants qw(:all);
14
use C4::SIP::Sip::Constants qw(:all);
Lines 290-306 sub new { Link Here
290
    my $id = $server->{account} ? $server->{account}->{id} . ':' : q{};
289
    my $id = $server->{account} ? $server->{account}->{id} . ':' : q{};
291
    $server->{logger}->debug( "$server->{server}->{peeraddr}:$id Sip::MsgType::new('$class', '" . substr($msg, 0, 10)
290
    $server->{logger}->debug( "$server->{server}->{peeraddr}:$id Sip::MsgType::new('$class', '" . substr($msg, 0, 10)
292
                    . "...', '$msgtag'): seq.no '$seqno', protocol $protocol_version" );
291
                    . "...', '$msgtag'): seq.no '$seqno', protocol $protocol_version" );
293
    syslog("LOG_DEBUG", "Sip::MsgType::new('%s', '%s...', '%s'): seq.no '%s', protocol %s",
294
		$class, substr($msg, 0, 10), $msgtag, $seqno, $protocol_version);
295
    if (!exists($handlers{$msgtag})) {
292
    if (!exists($handlers{$msgtag})) {
296
        $server->{logger}->warn("$server->{server}->{peeraddr}:$id new Sip::MsgType: Skipping message of unknown type '$msgtag' in '$msg'");
293
        $server->{logger}->warn("$server->{server}->{peeraddr}:$id new Sip::MsgType: Skipping message of unknown type '$msgtag' in '$msg'");
297
		syslog("LOG_WARNING", "new Sip::MsgType: Skipping message of unknown type '%s' in '%s'",
298
	       $msgtag, $msg);
299
        return;
294
        return;
300
    } elsif (!exists($handlers{$msgtag}->{protocol}->{$protocol_version})) {
295
    } elsif (!exists($handlers{$msgtag}->{protocol}->{$protocol_version})) {
301
        $server->{logger}->warn("$server->{server}->{peeraddr}:$id new Sip::MsgType: Skipping message '$msgtag' unsupported by protocol rev. '$protocol_version'");
296
        $server->{logger}->warn("$server->{server}->{peeraddr}:$id new Sip::MsgType: Skipping message '$msgtag' unsupported by protocol rev. '$protocol_version'");
302
		syslog("LOG_WARNING", "new Sip::MsgType: Skipping message '%s' unsupported by protocol rev. '%d'",
303
	       $msgtag, $protocol_version);
304
        return;
297
        return;
305
    }
298
    }
306
299
Lines 335-342 sub _initialize { Link Here
335
328
336
    my $id = $self->{server}->{account} ? $self->{server}->{account}->{id} . ':' : q{};
329
    my $id = $self->{server}->{account} ? $self->{server}->{account}->{id} . ':' : q{};
337
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$id Sip::MsgType::_initialize('$self->{name}', '$msg', '$proto->{template}', '$proto->{template_len}', ...)");
330
    $self->{server}->{logger}->debug("$self->{server}->{server}->{peeraddr}:$id Sip::MsgType::_initialize('$self->{name}', '$msg', '$proto->{template}', '$proto->{template_len}', ...)");
338
    syslog("LOG_DEBUG", "Sip::MsgType::_initialize('%s', '%s', '%s', '%s', ...)",
339
		$self->{name}, $msg, $proto->{template}, $proto->{template_len});
340
331
341
    $self->{fixed_fields} = [ unpack($proto->{template}, $msg) ];   # see http://perldoc.perl.org/5.8.8/functions/unpack.html
332
    $self->{fixed_fields} = [ unpack($proto->{template}, $msg) ];   # see http://perldoc.perl.org/5.8.8/functions/unpack.html
342
333
Lines 347-358 sub _initialize { Link Here
347
338
348
	if (!exists($self->{fields}->{$fn})) {
339
	if (!exists($self->{fields}->{$fn})) {
349
        $self->{server}->{logger}->warn("$self->{server}->{server}->{peeraddr}:$id: Unsupported field '$fn' in $self->{name}, message '$msg'");
340
        $self->{server}->{logger}->warn("$self->{server}->{server}->{peeraddr}:$id: Unsupported field '$fn' in $self->{name}, message '$msg'");
350
		syslog("LOG_WARNING", "Unsupported field '%s' in %s message '%s'",
351
			$fn, $self->{name}, $msg);
352
	} elsif (defined($self->{fields}->{$fn})) {
341
	} elsif (defined($self->{fields}->{$fn})) {
353
        $self->{server}->{logger}->warn("$self->{server}->{server}->{peeraddr}:$id: Duplicate field '$fn' (previous value '$self->{fields}->{$fn}') in $self->{name} message '$msg'");
342
        $self->{server}->{logger}->warn("$self->{server}->{server}->{peeraddr}:$id: Duplicate field '$fn' (previous value '$self->{fields}->{$fn}') in $self->{name} message '$msg'");
354
		syslog("LOG_WARNING", "Duplicate field '%s' (previous value '%s') in %s message '%s'",
355
			$fn, $self->{fields}->{$fn}, $self->{name}, $msg);
356
	} else {
343
	} else {
357
		$self->{fields}->{$fn} = substr($field, 2);
344
		$self->{fields}->{$fn} = substr($field, 2);
358
	}
345
	}
Lines 388-394 sub handle { Link Here
388
375
389
	if (!verify_cksum($msg)) {
376
	if (!verify_cksum($msg)) {
390
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Checksum failed on message '$msg'");
377
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Checksum failed on message '$msg'");
391
	    syslog("LOG_WARNING", "Checksum failed on message '%s'", $msg);
392
	    # REQUEST_SC_RESEND with error detection
378
	    # REQUEST_SC_RESEND with error detection
393
	    $last_response = REQUEST_SC_RESEND_CKSUM;
379
	    $last_response = REQUEST_SC_RESEND_CKSUM;
394
	    print("$last_response\r");
380
	    print("$last_response\r");
Lines 402-409 sub handle { Link Here
402
	# We received a non-ED message when ED is supposed to be active.
388
	# We received a non-ED message when ED is supposed to be active.
403
	# Warn about this problem, then process the message anyway.
389
	# Warn about this problem, then process the message anyway.
404
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Received message without error detection: '$msg'");
390
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Received message without error detection: '$msg'");
405
		syslog("LOG_WARNING",
406
	       "Received message without error detection: '%s'", $msg);
407
		$error_detection = 0;
391
		$error_detection = 0;
408
        $self = C4::SIP::Sip::MsgType->new( $msg, 0, $server );
392
        $self = C4::SIP::Sip::MsgType->new( $msg, 0, $server );
409
    } else {
393
    } else {
Lines 416-422 sub handle { Link Here
416
	}
400
	}
417
	unless ($self->{handler}) {
401
	unless ($self->{handler}) {
418
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: No handler defined for '$msg'");
402
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: No handler defined for '$msg'");
419
		syslog("LOG_WARNING", "No handler defined for '%s'", $msg);
420
        $last_response = REQUEST_SC_RESEND;
403
        $last_response = REQUEST_SC_RESEND;
421
        print("$last_response\r");
404
        print("$last_response\r");
422
        return REQUEST_ACS_RESEND;
405
        return REQUEST_ACS_RESEND;
Lines 531-537 sub handle_checkout { Link Here
531
        # Off-line transactions need to be recorded, but there's
514
        # Off-line transactions need to be recorded, but there's
532
        # not a lot we can do about it
515
        # not a lot we can do about it
533
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: received no-block checkout from terminal '$account->{id}'");
516
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: received no-block checkout from terminal '$account->{id}'");
534
        syslog( "LOG_WARNING", "received no-block checkout from terminal '%s'", $account->{id} );
535
517
536
        $status = $ils->checkout_no_block( $patron_id, $item_id, $sc_renewal_policy, $trans_date, $nb_due_date );
518
        $status = $ils->checkout_no_block( $patron_id, $item_id, $sc_renewal_policy, $trans_date, $nb_due_date );
537
    }
519
    }
Lines 654-660 sub handle_checkin { Link Here
654
    if ($no_block eq 'Y') {
636
    if ($no_block eq 'Y') {
655
        # Off-line transactions, ick.
637
        # Off-line transactions, ick.
656
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: received no-block checkin from terminal '$account->{id}'");
638
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: received no-block checkin from terminal '$account->{id}'");
657
        syslog("LOG_WARNING", "received no-block checkin from terminal '%s'", $account->{id});
658
        $status = $ils->checkin_no_block($item_id, $trans_date, $return_date, $item_props, $cancel);
639
        $status = $ils->checkin_no_block($item_id, $trans_date, $return_date, $item_props, $cancel);
659
    } else {
640
    } else {
660
        $status = $ils->checkin($item_id, $trans_date, $return_date, $my_branch, $item_props, $cancel, $account->{checked_in_ok});
641
        $status = $ils->checkin($item_id, $trans_date, $return_date, $my_branch, $item_props, $cancel, $account->{checked_in_ok});
Lines 774-797 sub handle_sc_status { Link Here
774
		$new_proto = 2;
755
		$new_proto = 2;
775
	} else {
756
	} else {
776
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Unrecognized protocol revision '$sc_protocol_version', falling back to '1'");
757
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Unrecognized protocol revision '$sc_protocol_version', falling back to '1'");
777
		syslog("LOG_WARNING", "Unrecognized protocol revision '%s', falling back to '1'", $sc_protocol_version);
778
		$new_proto = 1;
758
		$new_proto = 1;
779
	}
759
	}
780
760
781
	if ($new_proto != $protocol_version) {
761
	if ($new_proto != $protocol_version) {
782
        $server->{logger}->info("$server->{server}->{peeraddr}:$server->{account}->{id}: Setting protocol level to $new_proto");
762
        $server->{logger}->info("$server->{server}->{peeraddr}:$server->{account}->{id}: Setting protocol level to $new_proto");
783
		syslog("LOG_INFO", "Setting protocol level to $new_proto");
784
		$protocol_version = $new_proto;
763
		$protocol_version = $new_proto;
785
	}
764
	}
786
765
787
    if ($status == SC_STATUS_PAPER) {
766
    if ($status == SC_STATUS_PAPER) {
788
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Self-Check unit '$self->{account}->{id}@$self->{account}->{institution}' out of paper");
767
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Self-Check unit '$self->{account}->{id}@$self->{account}->{institution}' out of paper");
789
        syslog("LOG_WARNING", "Self-Check unit '%s@%s' out of paper",
790
               $self->{account}->{id}, $self->{account}->{institution});
791
    } elsif ($status == SC_STATUS_SHUTDOWN) {
768
    } elsif ($status == SC_STATUS_SHUTDOWN) {
792
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Self-Check unit '$self->{account}->{id}@$self->{account}->{institution}' shutting down");
769
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: Self-Check unit '$self->{account}->{id}@$self->{account}->{institution}' shutting down");
793
        syslog("LOG_WARNING", "Self-Check unit '%s@%s' shutting down",
794
               $self->{account}->{id}, $self->{account}->{institution});
795
    }
770
    }
796
771
797
    $self->{account}->{print_width} = $print_width;
772
    $self->{account}->{print_width} = $print_width;
Lines 829-839 sub login_core { Link Here
829
    my $status = 1;		# Assume it all works
804
    my $status = 1;		# Assume it all works
830
    if (!exists($server->{config}->{accounts}->{$uid})) {
805
    if (!exists($server->{config}->{accounts}->{$uid})) {
831
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: MsgType::login_core: Unknown login '$uid'");
806
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: MsgType::login_core: Unknown login '$uid'");
832
		syslog("LOG_WARNING", "MsgType::login_core: Unknown login '$uid'");
833
		$status = 0;
807
		$status = 0;
834
    } elsif ($server->{config}->{accounts}->{$uid}->{password} ne $pwd) {
808
    } elsif ($server->{config}->{accounts}->{$uid}->{password} ne $pwd) {
835
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: MsgType::login_core: Invalid password for login '$uid'");
809
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: MsgType::login_core: Invalid password for login '$uid'");
836
		syslog("LOG_WARNING", "MsgType::login_core: Invalid password for login '$uid'");
837
		$status = 0;
810
		$status = 0;
838
    } else {
811
    } else {
839
	# Store the active account someplace handy for everybody else to find.
812
	# Store the active account someplace handy for everybody else to find.
Lines 847-864 sub login_core { Link Here
847
        my $auth_status = api_auth($uid,$pwd,$inst);
820
        my $auth_status = api_auth($uid,$pwd,$inst);
848
		if (!$auth_status or $auth_status !~ /^ok$/i) {
821
		if (!$auth_status or $auth_status !~ /^ok$/i) {
849
            $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: api_auth failed for SIP terminal '$uid' of '$inst': " . ($auth_status||'unknown') );
822
            $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: api_auth failed for SIP terminal '$uid' of '$inst': " . ($auth_status||'unknown') );
850
			syslog("LOG_WARNING", "api_auth failed for SIP terminal '%s' of '%s': %s",
851
						$uid, $inst, ($auth_status||'unknown'));
852
			$status = 0;
823
			$status = 0;
853
		} else {
824
		} else {
854
            $server->{logger}->info("$server->{server}->{peeraddr}:$server->{account}->{id}: Successful login/auth for '$server->{account}->{id}' of '$inst'");
825
            $server->{logger}->info("$server->{server}->{peeraddr}:$server->{account}->{id}: Successful login/auth for '$server->{account}->{id}' of '$inst'");
855
			syslog("LOG_INFO", "Successful login/auth for '%s' of '%s'", $server->{account}->{id}, $inst);
856
			#
826
			#
857
			# initialize connection to ILS
827
			# initialize connection to ILS
858
			#
828
			#
859
			my $module = $server->{config}->{institutions}->{$inst}->{implementation};
829
			my $module = $server->{config}->{institutions}->{$inst}->{implementation};
860
            $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: login_core: " . Dumper($module) );
830
            $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: login_core: " . Dumper($module) );
861
			syslog("LOG_DEBUG", 'login_core: ' . Dumper($module));
862
            # Suspect this is always ILS but so we don't break any eccentic install (for now)
831
            # Suspect this is always ILS but so we don't break any eccentic install (for now)
863
            if ($module eq 'ILS') {
832
            if ($module eq 'ILS') {
864
                $module = 'C4::SIP::ILS';
833
                $module = 'C4::SIP::ILS';
Lines 866-873 sub login_core { Link Here
866
			$module->use;
835
			$module->use;
867
			if ($@) {
836
			if ($@) {
868
                $server->{logger}->error("$server->{server}->{peeraddr}:$server->{service}: Loading ILS implementation '$module' for institution '$inst' failed");
837
                $server->{logger}->error("$server->{server}->{peeraddr}:$server->{service}: Loading ILS implementation '$module' for institution '$inst' failed");
869
				syslog("LOG_ERR", "%s: Loading ILS implementation '%s' for institution '%s' failed",
870
						$server->{service}, $module, $inst);
871
				die("Failed to load ILS implementation '$module' for $inst");
838
				die("Failed to load ILS implementation '$module' for $inst");
872
			}
839
			}
873
840
Lines 876-882 sub login_core { Link Here
876
            $server->{ils} = $module->new( $server->{institution}, $server->{account}, $server );
843
            $server->{ils} = $module->new( $server->{institution}, $server->{account}, $server );
877
			if (!$server->{ils}) {
844
			if (!$server->{ils}) {
878
                $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: $server->{service}: ILS connection to '$inst' failed");
845
                $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: $server->{service}: ILS connection to '$inst' failed");
879
			    syslog("LOG_ERR", "%s: ILS connection to '%s' failed", $server->{service}, $inst);
880
			    die("Unable to connect to ILS '$inst'");
846
			    die("Unable to connect to ILS '$inst'");
881
			}
847
			}
882
		}
848
		}
Lines 900-906 sub handle_login { Link Here
900
866
901
    if ($uid_algorithm || $pwd_algorithm) {
867
    if ($uid_algorithm || $pwd_algorithm) {
902
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: LOGIN: Unsupported non-zero encryption method(s): uid = $uid_algorithm, pwd = $pwd_algorithm");
868
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: LOGIN: Unsupported non-zero encryption method(s): uid = $uid_algorithm, pwd = $pwd_algorithm");
903
		syslog("LOG_ERR", "LOGIN: Unsupported non-zero encryption method(s): uid = $uid_algorithm, pwd = $pwd_algorithm");
904
		$status = 0;
869
		$status = 0;
905
    }
870
    }
906
	else { $status = login_core($server,$uid,$pwd); }
871
	else { $status = login_core($server,$uid,$pwd); }
Lines 938-952 sub summary_info { Link Here
938
    }
903
    }
939
904
940
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: Summary_info: index == '$summary_type', field '$summary_map[$summary_type]->{fid}'");
905
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: Summary_info: index == '$summary_type', field '$summary_map[$summary_type]->{fid}'");
941
    syslog("LOG_DEBUG", "Summary_info: index == '%d', field '%s'",
942
        $summary_type, $summary_map[$summary_type]->{fid});
943
906
944
    my $func = $summary_map[$summary_type]->{func};
907
    my $func = $summary_map[$summary_type]->{func};
945
    my $fid  = $summary_map[$summary_type]->{fid};
908
    my $fid  = $summary_map[$summary_type]->{fid};
946
    my $itemlist = &$func($patron, $start, $end);
909
    my $itemlist = &$func($patron, $start, $end);
947
910
948
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: summary_info: list = (" . join(", ", @{$itemlist}) . ")");
911
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: summary_info: list = (" . join(", ", @{$itemlist}) . ")");
949
    syslog("LOG_DEBUG", "summary_info: list = (%s)", join(", ", @{$itemlist}));
950
    foreach my $i (@{$itemlist}) {
912
    foreach my $i (@{$itemlist}) {
951
        $resp .= add_field($fid, $i->{barcode});
913
        $resp .= add_field($fid, $i->{barcode});
952
    }
914
    }
Lines 1207-1214 sub handle_item_status_update { Link Here
1207
1169
1208
	if (!defined($item_id)) {
1170
	if (!defined($item_id)) {
1209
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_item_status: received message without Item ID field");
1171
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_item_status: received message without Item ID field");
1210
		syslog("LOG_WARNING",
1211
			"handle_item_status: received message without Item ID field");
1212
    } else {
1172
    } else {
1213
		$item = $ils->find_item($item_id);
1173
		$item = $ils->find_item($item_id);
1214
	}
1174
	}
Lines 1252-1259 sub handle_patron_enable { Link Here
1252
    $patron_pwd = $fields->{(FID_PATRON_PWD)};
1212
    $patron_pwd = $fields->{(FID_PATRON_PWD)};
1253
1213
1254
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_patron_enable: patron_id: '$patron_id', patron_pwd: '$patron_pwd'");
1214
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_patron_enable: patron_id: '$patron_id', patron_pwd: '$patron_pwd'");
1255
    syslog("LOG_DEBUG", "handle_patron_enable: patron_id: '%s', patron_pwd: '%s'",
1256
	   $patron_id, $patron_pwd);
1257
1215
1258
    $patron = $ils->find_patron($patron_id);
1216
    $patron = $ils->find_patron($patron_id);
1259
1217
Lines 1324-1331 sub handle_hold { Link Here
1324
						$expiry_date, $pickup_locn, $hold_type, $fee_ack);
1282
						$expiry_date, $pickup_locn, $hold_type, $fee_ack);
1325
    } else {
1283
    } else {
1326
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_hold: Unrecognized hold mode '$hold_mode' from terminal '$server->{account}->{id}'");
1284
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_hold: Unrecognized hold mode '$hold_mode' from terminal '$server->{account}->{id}'");
1327
        syslog("LOG_WARNING", "handle_hold: Unrecognized hold mode '%s' from terminal '%s'",
1328
               $hold_mode, $server->{account}->{id});
1329
        $status = $ils->Transaction::Hold;    # new?
1285
        $status = $ils->Transaction::Hold;    # new?
1330
        $status->screen_msg("System error. Please contact library staff.");
1286
        $status->screen_msg("System error. Please contact library staff.");
1331
    }
1287
    }
Lines 1375-1383 sub handle_renew { Link Here
1375
1331
1376
    if ($no_block eq 'Y') {
1332
    if ($no_block eq 'Y') {
1377
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_renew: received 'no block' renewal from terminal '$server->{account}->{id}'");
1333
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_renew: received 'no block' renewal from terminal '$server->{account}->{id}'");
1378
        syslog("LOG_WARNING",
1379
                "handle_renew: received 'no block' renewal from terminal '%s'",
1380
               $server->{account}->{id});
1381
    }
1334
    }
1382
1335
1383
    $patron_id  = $fields->{(FID_PATRON_ID)};
1336
    $patron_id  = $fields->{(FID_PATRON_ID)};
Lines 1545-1559 sub send_acs_status { Link Here
1545
1498
1546
    if (length($timeout) != 3) {
1499
    if (length($timeout) != 3) {
1547
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_acs_status: timeout field wrong size: '$timeout'");
1500
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_acs_status: timeout field wrong size: '$timeout'");
1548
        syslog("LOG_ERR", "handle_acs_status: timeout field wrong size: '%s'",
1549
               $timeout);
1550
        $timeout = '000';
1501
        $timeout = '000';
1551
    }
1502
    }
1552
1503
1553
    if (length($retries) != 3) {
1504
    if (length($retries) != 3) {
1554
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_acs_status: retries field wrong size: '$retries'");
1505
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: handle_acs_status: retries field wrong size: '$retries'");
1555
        syslog("LOG_ERR", "handle_acs_status: retries field wrong size: '%s'",
1556
               $retries);
1557
        $retries = '000';
1506
        $retries = '000';
1558
    }
1507
    }
1559
1508
Lines 1567-1575 sub send_acs_status { Link Here
1567
	$msg .= '2.00';
1516
	$msg .= '2.00';
1568
    } else {
1517
    } else {
1569
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: Bad setting for \$protocol_version, '$protocol_version' in send_acs_status");
1518
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: Bad setting for \$protocol_version, '$protocol_version' in send_acs_status");
1570
        syslog("LOG_ERR",
1571
               'Bad setting for $protocol_version, "%s" in send_acs_status',
1572
               $protocol_version);
1573
        $msg .= '1.00';
1519
        $msg .= '1.00';
1574
    }
1520
    }
1575
1521
Lines 1589-1595 sub send_acs_status { Link Here
1589
	}
1535
	}
1590
	if (length($supported_msgs) < 16) {
1536
	if (length($supported_msgs) < 16) {
1591
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: send_acs_status: supported messages '$supported_msgs' too short");
1537
        $server->{logger}->error("$server->{server}->{peeraddr}:$server->{account}->{id}: send_acs_status: supported messages '$supported_msgs' too short");
1592
	    syslog("LOG_ERR", 'send_acs_status: supported messages "%s" too short', $supported_msgs);
1593
	}
1538
	}
1594
	$msg .= add_field(FID_SUPPORTED_MSGS, $supported_msgs);
1539
	$msg .= add_field(FID_SUPPORTED_MSGS, $supported_msgs);
1595
    }
1540
    }
Lines 1599-1606 sub send_acs_status { Link Here
1599
    if (defined($account->{print_width}) && defined($print_line)
1544
    if (defined($account->{print_width}) && defined($print_line)
1600
	&& $account->{print_width} < length($print_line)) {
1545
	&& $account->{print_width} < length($print_line)) {
1601
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: send_acs_status: print line '$print_line' too long.  Truncating");
1546
        $server->{logger}->warn("$server->{server}->{peeraddr}:$server->{account}->{id}: send_acs_status: print line '$print_line' too long.  Truncating");
1602
        syslog("LOG_WARNING", "send_acs_status: print line '%s' too long.  Truncating",
1603
               $print_line);
1604
        $print_line = substr($print_line, 0, $account->{print_width});
1547
        $print_line = substr($print_line, 0, $account->{print_width});
1605
    }
1548
    }
1606
1549
Lines 1622-1628 sub patron_status_string { Link Here
1622
    my $patron_status;
1565
    my $patron_status;
1623
1566
1624
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: patron_status_string: $patron->id charge_ok: $patron->charge_ok");
1567
    $server->{logger}->debug("$server->{server}->{peeraddr}:$server->{account}->{id}: patron_status_string: $patron->id charge_ok: $patron->charge_ok");
1625
    syslog("LOG_DEBUG", "patron_status_string: %s charge_ok: %s", $patron->id, $patron->charge_ok);
1626
    $patron_status = sprintf(
1568
    $patron_status = sprintf(
1627
        '%s%s%s%s%s%s%s%s%s%s%s%s%s%s',
1569
        '%s%s%s%s%s%s%s%s%s%s%s%s%s%s',
1628
        denied($patron->charge_ok),
1570
        denied($patron->charge_ok),
(-)a/etc/SIPconfig.xml (-4 lines)
Lines 10-18 Link Here
10
  <server-params
10
  <server-params
11
    min_servers='1'
11
    min_servers='1'
12
    min_spare_servers='0' 
12
    min_spare_servers='0' 
13
    log_file='Sys::Syslog'
14
    syslog_ident='koha_sip'
15
    syslog_facility='local6'
16
  />
13
  />
17
  
14
  
18
  <listeners>
15
  <listeners>
19
- 

Return to bug 15253