diff options
| author | John Estabrook <jestabro@vyos.io> | 2025-09-10 11:39:24 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2025-09-10 11:39:24 -0500 |
| commit | 895f52e54fe32ba5c98d8bb69c5c8c67ddaad0fc (patch) | |
| tree | 80ec51f795985613e298a286a72ef4be0076bd17 /src | |
| parent | 024de8901245d531a85ef6ba5623aec6e33616d7 (diff) | |
| download | vyconf-895f52e54fe32ba5c98d8bb69c5c8c67ddaad0fc.tar.gz vyconf-895f52e54fe32ba5c98d8bb69c5c8c67ddaad0fc.zip | |
T7737: replace unuseful session_update_pid with session_exists
The request session_update_pid is not useful, possibly dangerous, in the
current design. Remove and add a simple session_exists for use in client
initialization.
Diffstat (limited to 'src')
| -rw-r--r-- | src/vyconf_pbt.ml | 58 | ||||
| -rw-r--r-- | src/vyconf_pbt.mli | 26 | ||||
| -rw-r--r-- | src/vyconfd.ml | 12 |
3 files changed, 46 insertions, 50 deletions
diff --git a/src/vyconf_pbt.ml b/src/vyconf_pbt.ml index 4bb26f2..96ba497 100644 --- a/src/vyconf_pbt.ml +++ b/src/vyconf_pbt.ml @@ -20,8 +20,8 @@ type request_session_of_pid = { client_pid : int32; } -type request_session_update_pid = { - client_pid : int32; +type request_session_exists = { + dummy : int32 option; } type request_get_config = { @@ -168,7 +168,7 @@ type request = | Discard of request_discard | Session_changed of request_session_changed | Session_of_pid of request_session_of_pid - | Session_update_pid of request_session_update_pid + | Session_exists of request_session_exists | Get_config of request_get_config type request_envelope = { @@ -217,10 +217,10 @@ let rec default_request_session_of_pid client_pid; } -let rec default_request_session_update_pid - ?client_pid:((client_pid:int32) = 0l) - () : request_session_update_pid = { - client_pid; +let rec default_request_session_exists + ?dummy:((dummy:int32 option) = None) + () : request_session_exists = { + dummy; } let rec default_request_get_config @@ -449,12 +449,12 @@ let default_request_session_of_pid_mutable () : request_session_of_pid_mutable = client_pid = 0l; } -type request_session_update_pid_mutable = { - mutable client_pid : int32; +type request_session_exists_mutable = { + mutable dummy : int32 option; } -let default_request_session_update_pid_mutable () : request_session_update_pid_mutable = { - client_pid = 0l; +let default_request_session_exists_mutable () : request_session_exists_mutable = { + dummy = None; } type request_get_config_mutable = { @@ -739,9 +739,9 @@ let rec pp_request_session_of_pid fmt (v:request_session_of_pid) = in Pbrt.Pp.pp_brk pp_i fmt () -let rec pp_request_session_update_pid fmt (v:request_session_update_pid) = +let rec pp_request_session_exists fmt (v:request_session_exists) = let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "client_pid" Pbrt.Pp.pp_int32 fmt v.client_pid; + Pbrt.Pp.pp_record_field ~first:true "dummy" (Pbrt.Pp.pp_option Pbrt.Pp.pp_int32) fmt v.dummy; in Pbrt.Pp.pp_brk pp_i fmt () @@ -944,7 +944,7 @@ let rec pp_request fmt (v:request) = | Discard x -> Format.fprintf fmt "@[<hv2>Discard(@,%a)@]" pp_request_discard x | Session_changed x -> Format.fprintf fmt "@[<hv2>Session_changed(@,%a)@]" pp_request_session_changed x | Session_of_pid x -> Format.fprintf fmt "@[<hv2>Session_of_pid(@,%a)@]" pp_request_session_of_pid x - | Session_update_pid x -> Format.fprintf fmt "@[<hv2>Session_update_pid(@,%a)@]" pp_request_session_update_pid x + | Session_exists x -> Format.fprintf fmt "@[<hv2>Session_exists(@,%a)@]" pp_request_session_exists x | Get_config x -> Format.fprintf fmt "@[<hv2>Get_config(@,%a)@]" pp_request_get_config x let rec pp_request_envelope fmt (v:request_envelope) = @@ -1015,9 +1015,13 @@ let rec encode_pb_request_session_of_pid (v:request_session_of_pid) encoder = Pbrt.Encoder.key 1 Pbrt.Varint encoder; () -let rec encode_pb_request_session_update_pid (v:request_session_update_pid) encoder = - Pbrt.Encoder.int32_as_varint v.client_pid encoder; - Pbrt.Encoder.key 1 Pbrt.Varint encoder; +let rec encode_pb_request_session_exists (v:request_session_exists) encoder = + begin match v.dummy with + | Some x -> + Pbrt.Encoder.int32_as_varint x encoder; + Pbrt.Encoder.key 1 Pbrt.Varint encoder; + | None -> (); + end; () let rec encode_pb_request_get_config (v:request_get_config) encoder = @@ -1360,8 +1364,8 @@ let rec encode_pb_request (v:request) encoder = | Session_of_pid x -> Pbrt.Encoder.nested encode_pb_request_session_of_pid x encoder; Pbrt.Encoder.key 27 Pbrt.Bytes encoder; - | Session_update_pid x -> - Pbrt.Encoder.nested encode_pb_request_session_update_pid x encoder; + | Session_exists x -> + Pbrt.Encoder.nested encode_pb_request_session_exists x encoder; Pbrt.Encoder.key 28 Pbrt.Bytes encoder; | Get_config x -> Pbrt.Encoder.nested encode_pb_request_get_config x encoder; @@ -1489,25 +1493,23 @@ let rec decode_pb_request_session_of_pid d = client_pid = v.client_pid; } : request_session_of_pid) -let rec decode_pb_request_session_update_pid d = - let v = default_request_session_update_pid_mutable () in +let rec decode_pb_request_session_exists d = + let v = default_request_session_exists_mutable () in let continue__= ref true in - let client_pid_is_set = ref false in while !continue__ do match Pbrt.Decoder.key d with | None -> ( ); continue__ := false | Some (1, Pbrt.Varint) -> begin - v.client_pid <- Pbrt.Decoder.int32_as_varint d; client_pid_is_set := true; + v.dummy <- Some (Pbrt.Decoder.int32_as_varint d); end | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(request_session_update_pid), field(1)" pk + Pbrt.Decoder.unexpected_payload "Message(request_session_exists), field(1)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; - begin if not !client_pid_is_set then Pbrt.Decoder.missing_field "client_pid" end; ({ - client_pid = v.client_pid; - } : request_session_update_pid) + dummy = v.dummy; + } : request_session_exists) let rec decode_pb_request_get_config d = let v = default_request_get_config_mutable () in @@ -2133,7 +2135,7 @@ let rec decode_pb_request d = | Some (25, _) -> (Discard (decode_pb_request_discard (Pbrt.Decoder.nested d)) : request) | Some (26, _) -> (Session_changed (decode_pb_request_session_changed (Pbrt.Decoder.nested d)) : request) | Some (27, _) -> (Session_of_pid (decode_pb_request_session_of_pid (Pbrt.Decoder.nested d)) : request) - | Some (28, _) -> (Session_update_pid (decode_pb_request_session_update_pid (Pbrt.Decoder.nested d)) : request) + | Some (28, _) -> (Session_exists (decode_pb_request_session_exists (Pbrt.Decoder.nested d)) : request) | Some (29, _) -> (Get_config (decode_pb_request_get_config (Pbrt.Decoder.nested d)) : request) | Some (n, payload_kind) -> ( Pbrt.Decoder.skip d payload_kind; diff --git a/src/vyconf_pbt.mli b/src/vyconf_pbt.mli index 85e8ba4..e2c2245 100644 --- a/src/vyconf_pbt.mli +++ b/src/vyconf_pbt.mli @@ -27,8 +27,8 @@ type request_session_of_pid = { client_pid : int32; } -type request_session_update_pid = { - client_pid : int32; +type request_session_exists = { + dummy : int32 option; } type request_get_config = { @@ -175,7 +175,7 @@ type request = | Discard of request_discard | Session_changed of request_session_changed | Session_of_pid of request_session_of_pid - | Session_update_pid of request_session_update_pid + | Session_exists of request_session_exists | Get_config of request_get_config type request_envelope = { @@ -228,11 +228,11 @@ val default_request_session_of_pid : request_session_of_pid (** [default_request_session_of_pid ()] is the default value for type [request_session_of_pid] *) -val default_request_session_update_pid : - ?client_pid:int32 -> +val default_request_session_exists : + ?dummy:int32 option -> unit -> - request_session_update_pid -(** [default_request_session_update_pid ()] is the default value for type [request_session_update_pid] *) + request_session_exists +(** [default_request_session_exists ()] is the default value for type [request_session_exists] *) val default_request_get_config : ?dummy:int32 option -> @@ -438,8 +438,8 @@ val pp_request_setup_session : Format.formatter -> request_setup_session -> unit val pp_request_session_of_pid : Format.formatter -> request_session_of_pid -> unit (** [pp_request_session_of_pid v] formats v *) -val pp_request_session_update_pid : Format.formatter -> request_session_update_pid -> unit -(** [pp_request_session_update_pid v] formats v *) +val pp_request_session_exists : Format.formatter -> request_session_exists -> unit +(** [pp_request_session_exists v] formats v *) val pp_request_get_config : Format.formatter -> request_get_config -> unit (** [pp_request_get_config v] formats v *) @@ -546,8 +546,8 @@ val encode_pb_request_setup_session : request_setup_session -> Pbrt.Encoder.t -> val encode_pb_request_session_of_pid : request_session_of_pid -> Pbrt.Encoder.t -> unit (** [encode_pb_request_session_of_pid v encoder] encodes [v] with the given [encoder] *) -val encode_pb_request_session_update_pid : request_session_update_pid -> Pbrt.Encoder.t -> unit -(** [encode_pb_request_session_update_pid v encoder] encodes [v] with the given [encoder] *) +val encode_pb_request_session_exists : request_session_exists -> Pbrt.Encoder.t -> unit +(** [encode_pb_request_session_exists v encoder] encodes [v] with the given [encoder] *) val encode_pb_request_get_config : request_get_config -> Pbrt.Encoder.t -> unit (** [encode_pb_request_get_config v encoder] encodes [v] with the given [encoder] *) @@ -654,8 +654,8 @@ val decode_pb_request_setup_session : Pbrt.Decoder.t -> request_setup_session val decode_pb_request_session_of_pid : Pbrt.Decoder.t -> request_session_of_pid (** [decode_pb_request_session_of_pid decoder] decodes a [request_session_of_pid] binary value from [decoder] *) -val decode_pb_request_session_update_pid : Pbrt.Decoder.t -> request_session_update_pid -(** [decode_pb_request_session_update_pid decoder] decodes a [request_session_update_pid] binary value from [decoder] *) +val decode_pb_request_session_exists : Pbrt.Decoder.t -> request_session_exists +(** [decode_pb_request_session_exists decoder] decodes a [request_session_exists] binary value from [decoder] *) val decode_pb_request_get_config : Pbrt.Decoder.t -> request_get_config (** [decode_pb_request_get_config decoder] decodes a [request_get_config] binary value from [decoder] *) diff --git a/src/vyconfd.ml b/src/vyconfd.ml index f1b1694..d765ed8 100644 --- a/src/vyconfd.ml +++ b/src/vyconfd.ml @@ -77,15 +77,9 @@ let session_of_pid _world (req: request_session_of_pid) = let extant = find_session_by_pid pid in {response_tmpl with output=extant} -let session_update_pid _world token (req: request_session_update_pid) = - let pid = req.client_pid in +let session_exists _world token (_req: request_session_exists) = try - begin - let s = Hashtbl.find sessions token in - if s.client_pid <> pid then - let session = {s with client_pid=pid} in - Hashtbl.replace sessions token session - end; + let _ = Hashtbl.find sessions token in {response_tmpl with output=(Some token)} with Not_found -> {response_tmpl with status=Fail; output=None} @@ -320,7 +314,7 @@ let rec handle_connection world ic oc () = | _, Session_of_pid r -> session_of_pid world r | _, Reload_reftree r -> reload_reftree world r | None, _ -> {response_tmpl with status=Fail; output=(Some "Operation requires session token")} - | Some t, Session_update_pid r -> session_update_pid world t r + | Some t, Session_exists r -> session_exists world t r | Some t, Teardown _ -> teardown world t | Some t, Enter_configuration_mode r -> enter_conf_mode r t | Some t, Exit_configuration_mode -> exit_conf_mode world t |
