This file is indexed.

/usr/lib/obs/server/BSNotify.pm is in obs-server 2.7.1-10.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#
# Copyright (c) 2008 Klaas Freitag, Novell Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see the file COPYING); if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
################################################################
#
# Module to talk to notification systems
#

package BSNotify;

use BSRPC;
use BSConfig;

use strict;

#
# Backend notifications are always routed through the source server. The API
# is processing them via /lastnotifications route and afterwards delivers
# them to the backend notifiy plugins via /notify_plugins.
#
sub notify {
  my ($type, $p, $payload) = @_;

  # strip
  $p = { map {$_ => $p->{$_}} grep {defined($p->{$_}) && !ref($p->{$_})} sort keys %{$p || {}} };

  my $param = {
    'uri' => "$BSConfig::srcserver/notify/$type",
    'request' => 'POST',
    'headers' => [ 'Content-Type: application/x-www-form-urlencoded' ],
    'timeout' => 60,
  };
  if ($payload) {
    $param->{'headers'} = [ 'Content-Type: application/octet-stream' ];
    $param->{'data'} = $payload;
  }
  my @args = map {"$_=$p->{$_}"} sort keys %$p;
  eval {
    BSRPC::rpc($param, undef, @args);
  };
  if ($@) {
    die($@) if $payload;	# payload transfers are fatal
    warn($@) if $@;
  }
}

#
# this is called from the /notify_plugins route that the API calls for all
# events (no matter the origin) if the API is configured to do so.
#
sub notify_plugins($$) {
  my ($type, $paramRef) = @_;

  return unless $BSConfig::notification_plugin;

  my $plugins = $BSConfig::notification_plugin;
  $plugins = [ split(' ', $plugins) ] unless ref($plugins);	# compat
  for my $plugin (@$plugins) {
    my $notifier = loadPackage($plugin);
    $notifier->notify($type, $paramRef);
  }
}

sub loadPackage {
  my ($plugin) = @_;
  eval {
     require "plugins/$plugin.pm";
  };
  warn("error: $@") if $@;
  return $plugin->new();
}

1;