Author: mvidner Date: Tue Nov 8 16:16:33 2011 New Revision: 66764 URL: http://svn.opensuse.org/viewcvs/yast?rev=66764&view=rev Log: added Write(.target.string, [filename, mode], content) (bnc#713661) Modified: branches/SuSE-Code-11-SP2-Branch/core/agent-system/src/SystemAgent.cc branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.out branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.ycp branches/SuSE-Code-11-SP2-Branch/core/package/yast2-core.changes Modified: branches/SuSE-Code-11-SP2-Branch/core/agent-system/src/SystemAgent.cc URL: http://svn.opensuse.org/viewcvs/yast/branches/SuSE-Code-11-SP2-Branch/core/agent-system/src/SystemAgent.cc?rev=66764&r1=66763&r2=66764&view=diff ============================================================================== --- branches/SuSE-Code-11-SP2-Branch/core/agent-system/src/SystemAgent.cc (original) +++ branches/SuSE-Code-11-SP2-Branch/core/agent-system/src/SystemAgent.cc Tue Nov 8 16:16:33 2011 @@ -709,25 +709,50 @@ { /** * @builtin Write (.target.string, string filename, string value) -> boolean + * @builtin Write (.target.string, [string filename, integer filemode] , string value) -> boolean * Writes the string <tt>value</tt> into a file. If the file already * exists, the existing file is overwritten. The return value is * true, if the file has been written successfully. + * + * @example Write(.target.string, "/etc/papersize", "a4") -> true + * @example Write(.target.string, ["/etc/rsyncd.secrets", 0600], "user:passwd") -> true */ - if (value.isNull() || !value->isString()) + if (value.isNull() || !(value->isString() || value->isList())) { ycp2error ("Bad filename arg for Write (.string ...)"); return YCPBoolean (false); } + string filename; + mode_t filemode = 0644; + + if (value->isString()) + { + filename = value->asString()->value(); + } + else + { // value is list + YCPList flist = value->asList(); + if ((flist->size() != 2) + || (!flist->value(0)->isString()) + || (!flist->value(1)->isInteger())) + { + ycp2error ("Bad [filename, mode] list in call to Write (%s, [ string filename, integer mode ], ...)", + cmd.c_str ()); + return YCPBoolean (false); + } + filename = flist->value(0)->asString()->value(); + filemode = (int)(flist->value(1)->asInteger()->value()); + } + if (arg.isNull() || !arg->isString()) { ycp2error ("Bad string value for Write (.string ...)"); return YCPBoolean (false); } - string filename = value->asString()->value(); - int fd = open(filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0644); + int fd = open(filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC, filemode); if (fd >= 0) { string cont = arg->asString()->value(); @@ -1038,8 +1063,8 @@ * Creates a symbolic link named newpath which contains the * string oldpath. * - * Symbolic links are interpreted at run-time as if the con - * tents of the link had been substituted into the path being + * Symbolic links are interpreted at run-time as if the contents + * of the link had been substituted into the path being * followed to find a file or directory. * * The return value is true or false, depending of the success. Modified: branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.out URL: http://svn.opensuse.org/viewcvs/yast/branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.out?rev=66764&r1=66763&r2=66764&view=diff ============================================================================== --- branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.out (original) +++ branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.out Tue Nov 8 16:16:33 2011 @@ -3,3 +3,4 @@ (true) (nil) ("never mind") +("secret file mode: 600\n") Modified: branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.ycp URL: http://svn.opensuse.org/viewcvs/yast/branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.ycp?rev=66764&r1=66763&r2=66764&view=diff ============================================================================== --- branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.ycp (original) +++ branches/SuSE-Code-11-SP2-Branch/core/agent-system/testsuite/tests/string.ycp Tue Nov 8 16:16:33 2011 @@ -24,3 +24,13 @@ // this must not produce a error in the log return SCR::Read (.string, ["not-here.txt", "never mind"]); } + +{ + map out = nil; + string filename = "tmp.secret.string"; + + SCR::Write (.string, [filename, 0600], "This is secret\n"); + + out = (map) SCR::Execute (.bash_output, "stat -c %a " + filename); + return "secret file mode: " + out["stdout"]:""; +} Modified: branches/SuSE-Code-11-SP2-Branch/core/package/yast2-core.changes URL: http://svn.opensuse.org/viewcvs/yast/branches/SuSE-Code-11-SP2-Branch/core/package/yast2-core.changes?rev=66764&r1=66763&r2=66764&view=diff ============================================================================== --- branches/SuSE-Code-11-SP2-Branch/core/package/yast2-core.changes (original) +++ branches/SuSE-Code-11-SP2-Branch/core/package/yast2-core.changes Tue Nov 8 16:16:33 2011 @@ -3,6 +3,7 @@ - ini-agent: added Write(.section_private.SECTION, BOOLEAN) (bnc#713661, CVE-2011-3177) +- system agent: added Write(.target.string, [filename, mode], content) - 2.17.41 ------------------------------------------------------------------- -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org