This fix make add ntp server available, so that users can add his own
time server when run time-admin..The solution is to use profiledb
method, to store all added time server to
/var/spool/setup-tool-backends/data/time/profiles.xml.
==========================================
--- system-tools-backends-1.4.2/time-conf.in.orig 2006-11-19
19:54:17.350540000 +0800
+++ system-tools-backends-1.4.2/time-conf.in 2006-11-20
19:26:08.371733000 +0800
+# zhua
+# add profiledb for ntp server added
+sub read_profiledb
+{
+ my ($hash);
+ my $path;
+ my $servers;
+
+
+ $path = &gst_file_get_data_path () . "/" . $main::tool->{'name'} . "/"
. $profile_file;
+ my $tree = &gst_xml_scan ($path, $tool);
+
+ if ($tree && scalar @$tree)
+ {
+ $servers = &xml_parse_profiledb ($tree, $hash);
+ }
+
+ return $servers;
+}
+
+sub xml_parse_profiledb
+{
+ my ($tree, $hash) = @_;
+ my (@servers);
+
+ if ($$tree[0] eq 'profiledb')
+ {
+ my $svrs = &xml_parse_profile ($$tree[1], $hash);
+ push(@servers, @$svrs);
+ }
+ else
+ {
+ &gst_report ('xml_unexp_tag', $$tree[0]);
+ }
+
+ return \...@servers ;
+
+}
+
+sub xml_parse_profile
+{
+ my ($tree, $hash) = @_;
+ my (@servers);
+
+ shift @$tree; # Skip attributes.
+
+ while (@$tree)
+ {
+ my $server;
+
+ if ($$tree[0] eq "profile") { $server = &xml_parse_server ($$tree[1],
$hash); }
+ else
+ {
+ &gst_report ("xml_unexp_tag", $$tree[0]);
+ }
+
+ push(@servers, $server) if ( $server );
+
+ shift @$tree;
+ shift @$tree;
+ }
+ return \...@servers;
+}
+
+sub xml_parse_server
+{
+ my ($tree, $hash) = @_;
+ my ($server);
+
+ shift @$tree; # Skip attributes.
+
+ while (@$tree)
+ {
+ if ($$tree[0] eq "server")
+ {
+ $server = $$tree[1][2];
+ }
+ else # files tag is ignored for parsing. # FIXME!
+ {
+ &gst_report ("xml_unexp_tag", $$tree[0]);
+ }
+
+ shift @$tree;
+ shift @$tree;
+
+ }
+ return $server;
+}
+
+sub write_profiledb
+{
+ my ($profiledb) = @_;
+
+ unless ($profiledb)
+ {
+ &gst_report ('users_write_profiledb_fail');
+ return;
+ }
+
+ # Write our profiles.
+ my $path = &gst_file_get_data_path () . "/" . $main::tool->{'name'} .
"/" . $profile_file;
+ my $fh = &gst_file_open_write_from_names ($path);
+ if ($fh)
+ {
+ local *STDOUT = $fh;
+
+ &xml_print_profiledb( $profiledb );
+
+ close ($fh);
+ &gst_report ('users_write_profiledb_success');
+ }
+ else
+ {
+ &gst_report ('users_write_profiledb_fail');
+ }
+}
+
+sub xml_print_profiledb
+{
+ my ($profiledb) = @_;
+
+ return unless (scalar @$profiledb);
+
+ &gst_xml_container_enter ('profiledb');
+
+ foreach my $profile (@$profiledb)
+ {
+ my $key;
+ &gst_xml_container_enter ('profile');
+ &gst_xml_print_pcdata("server", $profile);
+ &gst_xml_container_leave ();
+ }
+
+ &gst_xml_container_leave ();
+ &gst_xml_print_vspace ();
+}
--- gnome-system-tools-2.14.0/src/time/main.c.orig 2006-11-17
21:14:39.124138000 +0800
+++ gnome-system-tools-2.14.0/src/time/main.c 2006-11-20
00:48:43.247767000 +0800
-
+ GtkWidget *ntp_add_server_button;/* zhua */
/* ntp_list is a GtkTreeView */
ntp_list = gst_dialog_get_widget (tool->main_dialog, "ntp_list2");
+
+ /* used for add ntp server zhua */
+ ntp_add_server_button = gst_dialog_get_widget (tool->main_dialog,
"ntp_add_server");
+ g_object_set_data (G_OBJECT (ntp_add_server_button), "tool", tool);
--- gnome-system-tools-2.14.0/src/time/transfer.c.orig 2006-11-19
19:49:43.553274000 +0800
+++ gnome-system-tools-2.14.0/src/time/transfer.c 2006-11-20
00:03:22.906784000 +0800
+ /* retrieve the ntp server added by user zhua */
+ node = gst_xml_element_find_first (root, "profiledb");
+ if (node) {
+
+ for (node = gst_xml_element_find_first(node, "profile");
+ node;
+ node = gst_xml_element_find_next(node, "profile"))
+ {
+ node1 = gst_xml_element_find_first(node, "server");
+ s = gst_xml_element_get_content (node1);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, FALSE, 1, s, -1);
+
+ g_free (s);
+ }
+ }
+
--- gnome-system-tools-2.14.0/src/time/timeserv.c.orig 2006-11-20
01:26:46.816264000 +0800
+++ gnome-system-tools-2.14.0/src/time/timeserv.c 2006-11-20
19:42:18.043899000 +0800
@@ -25,7 +25,7 @@ on_ntp_addserver (GtkButton *button, Gst
ntp_entry = GTK_EDITABLE (gst_dialog_get_widget (dialog, "ntp_entry"));
ntp_list = GTK_TREE_VIEW (gst_dialog_get_widget (dialog, "ntp_list2"));
store = GTK_LIST_STORE (gtk_tree_view_get_model (ntp_list));
-
+
text = gtk_editable_get_chars (ntp_entry, 0, -1);
g_strstrip (text);
@@ -43,7 +43,24 @@ on_ntp_addserver (GtkButton *button, Gst
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, FALSE, 1, text, -1);
+
+ /* zhua */
+ xmlNodePtr root, node, node1;
+
+ GstTool *tool = g_object_get_data (G_OBJECT (button), "tool");
+ root = gst_xml_doc_get_root (tool->config);
+ node = gst_xml_element_find_first (root, "profiledb");
+ if (!node)
+ node = gst_xml_element_add (root, "profiledb");
+
+ node = gst_xml_element_add (node, "profile");
+
+ node = gst_xml_element_add (node, "server");
+
+ gst_xml_element_set_content (node, text);
+ /* end zhua */
+
g_free (text);
}
}