This file is indexed.

/usr/share/doc/libdbusada0.2-dev/examples/nm-dhcp-action/nm_dhcp_client_action.adb is in libdbusada0.2-dev 0.2-2.

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
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
--
--  D_Bus/Ada - An Ada binding to D-Bus
--
--  Copyright (C) 2011  Reto Buerki <reet@codelabs.ch>
--
--  This program is free software; you can redistribute it and/or
--  modify it under the terms of the GNU General Public License
--  as published by the Free Software Foundation; either version 2
--  of the License, or (at your option) any later version.
--
--  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; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
--
--  As a special exception, if other files instantiate generics from this
--  unit,  or  you  link  this  unit  with  other  files  to  produce  an
--  executable   this  unit  does  not  by  itself  cause  the  resulting
--  executable to  be  covered by the  GNU General  Public License.  This
--  exception does  not  however  invalidate  any  other reasons why  the
--  executable file might be covered by the GNU Public License.
--

with Ada.Strings.Unbounded;
with Ada.Environment_Variables;
with Ada.Containers.Ordered_Maps;

with D_Bus.Connection;
with D_Bus.Arguments.Basic;
with D_Bus.Arguments.Containers;

procedure NM_DHCP_Client_Action
is
   use Ada.Strings.Unbounded;
   use D_Bus;
   use type D_Bus.Arguments.Containers.Array_Type;

   Ignored_Args : constant array (1 .. 5) of Unbounded_String
     := (To_Unbounded_String ("PATH"),
         To_Unbounded_String ("SHLVL"),
         To_Unbounded_String ("_"),
         To_Unbounded_String ("PWD"),
         To_Unbounded_String ("dhc_dbus"));
   --  Env args to ignore.

   package Name_Value_Map_Package is new Ada.Containers.Ordered_Maps
     (Key_Type     => Unbounded_String,
      Element_Type => Unbounded_String);

   package NVMP renames Name_Value_Map_Package;

   DHCP_Args : NVMP.Map;

   Conn : constant Connection.Connection_Type
     := Connection.Connect (Bus => Bus_System);
   Args : Arguments.Containers.Array_Type;

   -------------------------------------------------------------------------

   procedure Append_Arg (Position : NVMP.Cursor);
   --  Append dhcp env arg as D-Bus dict entry to array.

   procedure Append_Arg (Position : NVMP.Cursor)
   is
      use D_Bus.Arguments.Containers;
      use D_Bus.Arguments.Basic;

      Value      : constant String := To_String (NVMP.Element (Position));
      Dict       : Dict_Entry_Type;
      Variant    : Variant_Type;
      Byte_Array : Array_Type;
   begin
      for B in Value'Range loop
         Byte_Array.Append (New_Item => +Byte'(Character'Pos (Value (B))));
      end loop;

      Variant := Create (Source => Byte_Array);

      Dict := Create (Key   => +To_String (NVMP.Key (Position)),
                      Value => Variant);
      Args.Append (New_Item => Dict);
   end Append_Arg;

   -------------------------------------------------------------------------

   procedure Filter_Arg (Name, Value : String);
   --  Check if given env arg should be ignored.

   procedure Filter_Arg (Name, Value : String)
   is
   begin
      if Value'Length = 0 then
         return;
      end if;

      for A in Ignored_Args'Range loop
         if Name = To_String (Ignored_Args (A)) then
            return;
         end if;
      end loop;

      DHCP_Args.Insert (Key      => To_Unbounded_String (Name),
                        New_Item => To_Unbounded_String (Value));
   end Filter_Arg;

begin
   Ada.Environment_Variables.Iterate (Process => Filter_Arg'Access);

   DHCP_Args.Iterate (Process => Append_Arg'Access);

   Connection.Request_Name
     (Connection => Conn,
      Name       => "org.freedesktop.nm_dhcp_client");

   Connection.Send_Signal (Connection  => Conn,
                           Object_Name => "/",
                           Iface       => "org.freedesktop.nm_dhcp_client",
                           Name        => "Event",
                           Args        => +Args);
end NM_DHCP_Client_Action;